Nob*_*ody 13 c# get properties set
private List<Date> _dates;
public List<Date> Dates
{
get { return _dates; }
set { _dates = value; }
}
Run Code Online (Sandbox Code Playgroud)
要么
public List<Date> Dates
{
get;
set;
}
Run Code Online (Sandbox Code Playgroud)
我一直用前者,是不正确还是不好的做法?我从未想过我可以使用第二个选项.我喜欢让我的封装变量以下划线开头,所以我可以将它们与方法参数区分开来.而我总是那样做.
是否有可能使用第一个选项会导致额外的List<Date>对象被实例化,然后整个_dates被替换value,或者它是否比这更聪明?
此外,哪个是行业中最突出的还是完全主观的?
Jus*_*ner 19
如果您需要为getter/setter添加某种逻辑,请使用前者.
否则使用后者.它使事情变得更加清洁.您还可以使用自动属性实现只读属性:
public List<Date> Dates { get; private set; }
Run Code Online (Sandbox Code Playgroud)
或者,如果您不希望人们通过属性向列表中添加任何项目,您可以使用以前的语法:
private List<Date> _dates = new List<Date>();
private ReadOnlyCollection<Date> _readOnlyDates =
new ReadOnlyCollection<Date>(_dates);
public ReadOnlyCollection<Date> Dates
{
get { return _readOnlyDates; }
}
Run Code Online (Sandbox Code Playgroud)
它们在内部编译形式中是等效的,除了您不能以第二种形式访问编译器生成的私有变量.
从代码效率的角度来看,它们也是等价的,即时编译器通常直接访问私有变量而没有调用访问函数的开销(在运行时环境检查了可访问性等之后).
从编码的角度来看,我更喜欢第二个版本,它更紧凑(写入少,阅读少).
第二种语法是在C#3.0中引入的.因此第一个变体将与旧编译器更兼容.