【问题标题】:What's the difference between Public variable and Public Property in VB.NET? (Code Analysis VS2010, CA1051 : Microsoft.Design)VB.NET 中的公共变量和公共属性有什么区别? (代码分析VS2010,CA1051:Microsoft.Design)
【发布时间】:2012-01-24 16:01:10
【问题描述】:

在我的项目上运行代码分析时,我收到以下消息:

CA1051 : Microsoft.Design : Because field 'ClassName.VarName' is visible outside of its declaring type, change its accessibility to private and add a property, with the same accessibility as the field has currently, to provide access to it.

要解决这个问题,我可以更改以下行:

Public VarName As String

到这里:

Public Property VarName As String

我不明白为什么Property 关键字在这种特殊情况下如此重要。谁能解释为什么将此成员更改为Property 会对代码分析产生重大影响?我做错了吗?

【问题讨论】:

    标签: .net vb.net visual-studio-2010 code-analysis


    【解决方案1】:

    使用“属性”允许您为变量定义公共访问方法,而不是将这些变量公开。看这里有一个很好的解释:http://msdn.microsoft.com/en-us/library/65zdfbdt%28v=vs.71%29.aspx

    【讨论】:

      【解决方案2】:

      将变量设为私有并提供公共属性来访问数据一直是一种很好的编码习惯。

      例如,如果您稍后需要添加一些在值更改时引发的事件,则将该代码粘贴到 set 属性中要容易得多,并且不需要触及使用该属性的所有现有代码,但是如果您继续使用变量,然后决定需要引发事件,则必须创建一个设置值并引发事件的属性,然后更新所有现有代码以使用您刚刚创建的新属性而不是变量。

      【讨论】:

      • 从 VB.Net 开始,无论如何。在 VB6 中,您可以用属性替换公共变量,而无需接触调用者。这是 VB6 中唯一比 .Net 更好的东西。
      • 即使在 VB6 中,第一次使用属性也很好。让你做一开始就不应该做的事情并不一定“更好”。
      • 为什么你认为这是“你一开始就不应该做的事情”(在 VB6 中)?我的意思是,+1 对 VB.Net 的好答案,但它不适用于 VB6。在 VB6 中“如果你继续使用变量然后决定你需要引发一个事件,你必须创建一个属性来设置值并引发事件,然后 你不需要触摸任何现有代码,它会自动使用该属性”。
      • 我的意思是因为 VB6 允许您这样做,所以一开始就不是不使用属性的好理由。
      • 是的,你已经说过两次了。我问为什么,两次如何。 首先使用属性有什么好处? VB6 公共变量相当于 VB 2010 自动实现的属性。
      【解决方案3】:

      封装是OOD中的一个重要原则。如果您将您的成员暴露给其他人(我知道,我自己已经在咯咯笑了),无法保证您能够保持适当的状态。

      通过使用属性,您可以通过定义有关如何访问成员的明确指南来保护成员的状态。

      【讨论】:

      • 真的,真的。我写的东西很简单,任何获取/设置都是默认的。过去,当我需要封装某些东西时,我只会用 getter/setter 重写......但我永远不会这样做,我的所有公共成员都会这样做......我想最好的做法是你应该为所有人?
      • @afuzzyllama:是的,对所有成员都这样做并没有什么坏处……特别是因为 VB.NET 可能具有自动属性,就像 C# 一样。
      • VB.NET 在 2010 年具有自动实现的属性。以前的版本没有。
      【解决方案4】:

      Public Property VarName As String 声明一个提供封装级别的属性。您将能够使用 _VarName 在您的类中访问此变量的私有成员状态。

      Public VarName As String 声明了一个变量,该变量将只提供该变量的单个公共实例并且不进行封装。

      【讨论】:

      • 那么,在 .NET 中使用封装是否被认为是最佳实践?
      • 如果您想实现访问控制(可能不会在您的情况下 - 也许将来?),或者对调用代码隐藏实现,我会这么说。
      • 99.9% 的人怀疑我是否会再次接触这段代码,但我同意帽子封装对于代码的可维护性很重要。
      猜你喜欢
      • 2011-09-26
      • 2014-08-22
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多