正确的变量声明
我注意到有些人声明一个私有变量,然后一个公共变量与get和set语句:正确的变量声明
private string myvariable = string.Empty;
public string MyVariable
{
get { return myvariable; }
set { myvariable = value ?? string.Empty; }
}
,然后有些人只是做到以下几点:
public string MyVariable
{
get { return value; }
set { MyVariable = value; }
}
作为一个小智慧的熊(是的,我有孩子......你为什么问?)我无法弄清楚为什么你会选择一个。使用公共变量是否有效,您可以使用变量的set方法设置任何时间?
任何人都可以为我阐述一些这方面的信息吗?
更新:我纠正了第二个例子后,几个人指出它不会编译。对不起,但问题仍然存在......
你的第二个例子不会编译,因为getter的值变量不存在。另外,setter会导致同名的StackOverflow异常!
在C#3.0中,可以使用下面的语法可以让编译器创建私有变量后盾:
public string MyVariable { get; set; }
这不会给你额外的空检查你的第一个例子了,虽然。如果您需要定制器中的自定义逻辑,您可能必须坚持使用第一个示例的方法。
+1对于任何正确使用单词同名的答案:) – 2009-01-09 06:21:30
我以为他应该得到点使用StackOverflow在本网站的名称以外的东西...... ;-) – Dscoduc 2009-01-09 06:31:30
正如其他人所说,你的第二个例子不编译。
但是,不使用公共领域有很好的理由。事实上,你的例子演示了其中的一个 - 对于这个属性,即使你将它设置为null,如果你再次要求它,你会得到一个空字符串。对于该房产是否合适(它是略微奇数)取决于确切的用途 - 但它不是公共领域的行为。
我有一个whole article关于为什么房产比公共领域,你会发现有用的。
有一个微不足道的getter和setter与使用公共领域非常相似。
主要论据宁愿在使用是uniform access principle性能getter和setter方法,但由于C#具有的属性很容易用一个属性来取代公共领域,并重新编译。
这并不完美(见Jon Skeet的文章),但反对使用公共领域的论点并不那么强烈,只要你意识到差异,它就会变成“邪恶”。
个人而言,我喜欢能够轻松地为公共领域指定默认值。
“是不是在使用公共变量时有效,您可以使用变量的get方法设置任何时间” - 您不能从getter中设置var,只能设置setter。 – 2009-01-09 06:16:09
呃,你是对的...错字。需要更多的睡眠或咖啡因... – Dscoduc 2009-01-09 07:07:40
第二个例子仍然不会编译 - 您没有“值”变量,并且setter仍然是递归的。第一个和第二个例子之间有什么不同? – 2009-01-09 07:27:33