【发布时间】:2015-05-25 15:16:20
【问题描述】:
我在 Outlook 2013 的 VSTO 插件中使用 .NET 4.5。我在完全掌握属性和访问器时遇到了一些麻烦。我假设当你只写 get 时自动实现的访问器;放;而不是得到{ //code }等也给我带来麻烦。我有一本我在课堂上使用的字典。这是我的代码:
private Dictionary<string, string> clientDict { get; set; }
private Dictionary<string, string> clientHistoryDict { get; set; }
然后:
clientDict = new Dictionary<string, string>();
clientHistoryDict = new Dictionary<string, string>();
我稍后在同一个类中使用与代码中的属性相同的名称。
我从来没有真正写过:
private Dictionary<string, string> _clientDict; // etc.
创建变量我只是直接使用该属性。
我尝试更改我的代码来执行此操作,但遇到了一些问题,并意识到我对属性的理解有点混乱。
这里有几个问题我需要澄清,但我似乎找不到正确答案。
首先,是否有任何理由使用私有财产?我的字典永远不会在类之外或任何派生类中访问,所以有理由甚至使用属性吗?我不使用任何特殊的验证或设置器中的任何东西或类似的东西。
其次,当我尝试将代码更改为使用变量,然后像典型的属性示例那样通过属性访问它们时,我遇到了问题。我找到了一个示例,其中 getter 设置为 return _clientDict,但 setter 只是 set; 它给了我错误:我必须给 set 一个主体,因为它不是抽象的或部分的。为什么它不会在这种情况下为我自动实现 setter?
最后,当我对声明它的同一类中的属性调用 new 时,使用属性和相同类型的普通变量执行此操作有什么区别?在这种情况下,属性是否与变量完全不同?当应该使用私有变量来完成时,以这种方式使用属性是不好的做法吗?
这些可能是一些被误导的问题,但我找不到任何其他地方有信息可以帮助我理解这些区别。我一直在使用属性来尝试解决所有这些问题,但我可以使用我的帮助。
【问题讨论】:
标签: c# properties field