16 c# properties
嗨伙计们下面的两段代码有什么区别吗?或者顶部只是底部的一个简短形式?
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)
Eri*_* J. 11
唯一的区别(除了你必须在类构造函数中使用"默认名称"进行初始化的事实)是_Name将在类本身中可见.有一个风险,类会在内部引用_Name而不是Name,一切都会正常工作,并且在稍后的某个时间点你会添加一些逻辑给Name,因为你在类中使用了_Name而不会被调用.
例:
private string _Name = "Default Name";
public string Name
{
get { return _Name.Left(42); } // Changed the getter
set { _Name = value; }
}
void MyOtherMethod()
{
string foo = _Name; // Referencing the private field accidentally instead of the public property.
// Do something with foo
}
Run Code Online (Sandbox Code Playgroud)
两种属性方法的基本行为和目的几乎相同。但主要区别在于实施。和...之间的不同
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)
是如果您使用简短的属性语法(在框架 3.0 或更高版本中引入),则属性字符串永远不会被初始化,即如果您在任何地方直接使用“Name”属性而不为其设置值,它将返回一个 NULL 值。但是如果你使用第二种语法来初始化属性值,它会返回一个 EMPTY 字符串,因为当你初始化一个字符串时,它被初始化为一个 EMPTY 值而不是 NULL。因此,如果您在不使用 FULL 属性方法初始化的情况下返回属性值,它将始终返回 EMPTY 字符串而不是 NULL 值。
| 归档时间: |
|
| 查看次数: |
10211 次 |
| 最近记录: |