这4个课程做同样的事情,但有人可以解释为什么你应该使用一个而不是另一个?
public class MyClass
{
public string MyString { get; set; }
}
public class MyClass
{
public string MyString;
}
public class MyClass
{
private string _mystring;
public string MyString
{
get { return (string)GetValue(_mystring); }
set { SetValue(_mystring, value); }
}
}
public class MyClass
{
private string _mystring;
public string MyString
{
get { return _mystring; }
set { _mystring = value; }
}
}
我可以用
连接其中任何一个MyClass m=new MyClass();
m.MyString="test";
是个人编码偏好还是每个都有原因?
答案 0 :(得分:0)
在我看来,第1版,第3版和第4版只是声明类属性的不同方法(使用get和set访问器)。第一种方式可能是申报财产的最快方式,但与第三和第四方相比灵活性有限。
第二个函数使用与属性不同的东西,它有一个公共字段,这被认为是一种不好的做法。我们应该始终使用属性来访问类的私有成员。
答案 1 :(得分:0)
您的所有示例在实践中都是有效的,但如果您实现为属性集/获取方法,则您可以干预该过程,例如,您可以通知值已更改;
public class MyClass
{
public event PropertyChangedHandler PropertyChanged;
private string myString;
public string MyString
{
get
{
return myString;
}
set
{
// don't allow same value to be set
if (value == myString) return;
myString = value;
PropertyChanged(this, "MyString");
}
}
}
其他例子可能是;添加验证逻辑,在接受set调用之前添加安全性/授权,在getter中返回复合值。