我一直认为属性就像方法的捷径.然而这个例子让我很奇怪.在我看来,函数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.
你有一个错误:
set { mId = Id; }
Run Code Online (Sandbox Code Playgroud)
这应该是:
set { mId = value; }
Run Code Online (Sandbox Code Playgroud)
这value是value您应该在属性
设置器中使用的新内容.由于这个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)