属性设置器不更新支持字段

gal*_*ize 0 c# properties

我一直认为属性就像方法的捷径.然而这个例子让我很奇怪.在我看来,函数changePropertyId和changeMethodId也是这样做的.然而现实却不同.只有第二个正常工作.有人可以解释一下吗?

class Program
{
    static void Main(string[] args)
    {
        User user = new User();
        user.changePropertyId(1);
        Console.Write(user.Id);
        user.changeMethodId(1);
        Console.Write(user.Id);
        Console.ReadLine();
    }
}

public class DBObject
{
    private int mId;
    public int Id { set { mId = Id; } get { return mId; } }
    public void setId(int aId)
    {mId = aId;}
}

public class User : DBObject
{
    public void changePropertyId(int aId) { Id = aId; }
    public void changeMethodId(int aId) { setId(aId); }
}
Run Code Online (Sandbox Code Playgroud)

第一个函数的结果是0,第二个函数的结果是1.我的目的是从两个函数得到1.

pet*_*rov 5

你有一个错误:

set { mId = Id; }
Run Code Online (Sandbox Code Playgroud)

这应该是:

set { mId = value; }
Run Code Online (Sandbox Code Playgroud)

valuevalue您应该在属性
设置器中使用的新内容.由于这个bug基本上你的setter没有效果.

这是固定版本.

public class DBObject
{
    private int mId;
    public int Id { set { mId = value; } get { return mId; } }
    public void setId(int aId) { mId = aId; }
}
Run Code Online (Sandbox Code Playgroud)