C#的新手,我知道封装只是一种“保护数据”的方式.但我还不清楚.我认为get和set访问器的重点是在这些方法中添加测试以检查参数是否符合某些条件,然后允许外部函数获取和设置任何内
private string myName; public string MyName;// this is a property, speical to c#, which sets the backing field. private string myName = "mary";// the backing field. public string MyName // this is a property, which sets/gets the backing field. { get { return myName; } set { if (value != "Silly Woman"){ myName = value; } } }
但是我一直在看c#中的代码看起来像这样:
public string MyName { get; set; }
为什么你只是在那里得到一个没有任何东西的get-set, – 这不仅仅是公开你的私人支持领域吗?如果您可以从外部获取并设置它,为什么不直接进行?
实际上,创建一个自动属性如下:public string Name { get; set; }
与构建由字段支持的属性相同:
private string _name; public string Name { get { return _name; } set { _name = value; } }
这些属性的重点不是隐藏数据.正如你所观察到的,他们不会这样做.相反,这些属性可以执行其他操作,而不仅仅是使用字段:
public string Name { get { return _name; } set { if (value == null) throw new Exception("GTFO!"); _name = value; } }
另一件事是,你可以使属性虚拟:
public virtual string Name { get; set; }
如果被覆盖,则可以在派生类中提供不同的结果和行为.