我的问题是设置和获得方法。虽然我知道如何使用和为什么要使用for,但我无法理解这些使用样式之间的主要区别。
public string a{get;set;}
public string a
{
get{return a;}
set{a=value;}
}发布于 2013-08-21 13:46:26
如果希望使用较少的代码,请使用第一种形式,称为auto属性。在场景后面,编译器将为您创建支持字段。
如果您在物业中进行了一些处理,请使用标准方法。
public string A{get;set;} //Auto property
public string A
{
get{return a;}`
set{
//Do some check-Processing
if(value != null)
a=value;
}
}发布于 2013-08-21 13:42:16
第一种形式是自动实现的属性 in C#
在C# 3.0及更高版本中,当属性访问器中不需要额外的逻辑时,自动实现的属性使属性声明更加简洁。
当前表单中的第二种形式(虽然不正确)需要显式定义支持字段,并且可以放置显式代码来设置和读取值。
第二种形式可以是:
private string _a; // a backing field
public string a
{
get
{
return _a;
}
set
{
if (a != null) //some validation
_a = value;
else
_a = string.Empty;
}
}(目前,第二种形式的属性将导致堆栈溢出异常,因为它将进入无限循环)
发布于 2013-08-21 13:42:43
第一个将生成一个隐式字段,您的值将被写入和读取。这些被称为“自动实现的属性”。而在第二种情况下,您将显式地命名您的属性将写入和读取的字段。来自MSDN
在C# 3.0及更高版本中,当属性访问器中不需要额外的逻辑时,自动实现的属性使属性声明更加简洁。它们还使客户端代码能够创建对象。当您声明一个属性时,如下面的示例所示,编译器将创建一个私有的匿名备份字段,该字段只能通过属性的get和set访问器访问。
您的实现
public string a
{
get{return a;}
set{a=value;}
}将导致StackoverflowException,因为您在get-accessor中递归地调用get。
把它改成
private string a;
public string A{
get{ return a; }
set{ a = value; }
}https://stackoverflow.com/questions/18359051
复制相似问题