我见过大多数人在类中使用成员变量:
string _foo;
public string foo { get { return _foo; }; private set { _foo = value}; }
但这与此有何不同?
public string foo { get; private set; }
答案 0 :(得分:4)
在简单的情况下,它是相同的,但在更复杂的情况下,你触发事件或东西,你需要在get和set中的其他代码,所以你需要成员ex:
private string _name;
public string Name
{
get{ return _name; }
set
{
SomeHandler("Name", value);
_name = value;
}
}
答案 1 :(得分:3)
只要属性实现除了获取和设置之外实际上什么都不做,差别很小。使用它的原因可能是:
public string Name { get; set; }
语法。ref
参数。这还包括使用本机互操作(GCHandle
等)中的值。readonly
支持字段。这只是冰山一角。还有很多奇怪的原因,比如必须明确声明字段,以便有人可以使用反射来访问它,无论出于何种原因。
答案 2 :(得分:1)
在引入“自动属性”之前,我们需要为这些属性使用一些“支持字段”。大多数情况下,Propoerties只会返回值/将值设置为“支持字段”,如下例所示。
public string Name
{
get { return _name; }
set { _name=value; }
}
随着“自动属性”的引入,我们可以简单地忽略“支持字段”(或者我们不需要提供“支持字段”)。如果您的设计与上面的示例类似,这大多是合适的,但如果您需要在检索值时或在设置值之前强制实施一些“类型”的自定义逻辑,我们仍然需要遵循“良好的旧设计”(即支持领域)
答案 3 :(得分:0)
不同的场景有各种优势。
string _FirsName;
string _LastName;
public string FullName
{
get
{
return _FirsName + _LastName;
}
set;
}
public string ReverseName
{
get
{
return _LastName + ", " + _FirsName;
}
set;
}