获取/设置值的类 - 不同的情况

时间:2014-03-04 00:32:28

标签: c#

这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";

是个人编码偏好还是每个都有原因?

2 个答案:

答案 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中返回复合值。