Gia*_*ani 3 c# encapsulation get set
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是我一直在看c#中的代码看起来像这样:
public string MyName { get; set; }
Run Code Online (Sandbox Code Playgroud)
为什么你只是在那里得到一个没有任何东西的get-set, - 这不仅仅是公开你的私人支持领域吗?如果您可以从外部获取并设置它,为什么不直接进行?
实际上,创建一个自动属性如下:
public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)
与构建由字段支持的属性相同:
private string _name;
public string Name {
get { return _name; }
set { _name = value; }
}
Run Code Online (Sandbox Code Playgroud)
这些属性的重点不是隐藏数据.正如你所观察到的,他们不会这样做.相反,这些属性可以执行其他操作,而不仅仅是使用字段:
public string Name {
get { return _name; }
set { if (value == null) throw new Exception("GTFO!"); _name = value; }
}
Run Code Online (Sandbox Code Playgroud)
另一件事是,你可以使属性虚拟:
public virtual string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)
如果被覆盖,则可以在派生类中提供不同的结果和行为.
归档时间: |
|
查看次数: |
3154 次 |
最近记录: |