是否存在在VB.NET中命名私有字段的官方约定?例如,如果我有一个名为'Foo'的属性,我通常会调用私有字段'_Foo'。这似乎在Offical Guidelines:
中不受欢迎“不要为字段名称使用前缀。例如,不要使用g_或s_来区分静态字段和非静态字段。”
在C#中,您可以调用私有字段'foo',属性'Foo',并在构造函数中将私有字段称为'this.foo'。由于VB.NET不区分大小写,你不能这样做 - 任何建议?
答案 0 :(得分:21)
我仍然在VB中使用_前缀用于私有字段,因此我将_foo作为私有字段,将Foo作为属性。我也是为c#做的,几乎是我写的任何代码。一般来说,我不会太过追求“正确的方法”,因为没有真正的“正确”方式(虽然有一些非常糟糕的方法),而是关注一贯地做到这一点。 / p>
在一天结束时,保持一致将使您的代码比使用任何“正确”约定更具可读性和可维护性。
答案 1 :(得分:7)
这是个人偏好,尽管人们普遍支持某些区别。即使在C#中,我也不认为有一种广泛使用的惯例。
作为个人偏好的问题,我通常在私有字段前加上下划线[在C#中] ......这个约定在.NET框架中使用了很多但是并没有在整个过程中使用。
来自。NET Framework Design Guidelines第2版第73页。
我将所有字段设为私有,并使用“m_”将我的实例字段作为前缀,将我的静态字段添加为“s_”[在C#中]
来自。NET Framework Design Guidelines第2版第47页.Anthony Moore(BCL team)也认为使用“m_”和“s_”值得考虑,第48页。
答案 2 :(得分:3)
官方指南只是 - 指导方针。你总能绕过它们。话虽如此,我们通常在 C#和VB.NET中使用下划线为字段添加前缀。这个惯例非常普遍(很明显,官方指南被忽略了)。
然后可以在没有“me”关键字的情况下引用私有字段(“this”关键字用于C#:)
答案 3 :(得分:3)
您明确链接的设计指南声明它们仅适用于静态公共字段和受保护字段。设计指南主要侧重于设计公共API;你对私人会员的所作所为取决于你。我并不积极,但我相信在编译器检查CLS合规性时不会考虑私人成员,因为只有公共/受保护成员才能参与其中(这个想法是,“如果有人使用某种语言不允许_字符尝试使用您的库?“如果成员是私有的,答案是”没有,用户不必使用这些成员。“但如果成员是公开的,那你就麻烦了。 )
那就是说,我要添加回声室并指出无论你做什么,保持一致都很重要。我的雇主强制要求C#和VB中的私有字段都以_为前缀,因为我们所有人都遵循这个约定,所以很容易使用其他人编写的代码。
答案 4 :(得分:3)
在VB.NET 4.0中,大多数人可能知道你不需要为你的Property声明显式编写getter和setter,如下所示:
Public Property Foo As String
Public Property Foo2 As String
VB自动创建名为_Foo和_Foo2的私有成员变量。好像微软和VS团队采用了_惯例,所以我没有看到它的问题。
答案 5 :(得分:2)
我认为没有正式的命名约定,但我看到微软在Microsoft.VisualBasic dll中使用m_(通过反射器)。
答案 6 :(得分:2)
我仍然在VB中使用_前缀 私有领域,所以我会_foo为 私人领域和Foo作为 属性。我也为c#做这个 几乎我写的任何代码。 一般来说,我不会太过追赶 在“什么是正确的方式” 因为没有真正的“权利” 方式(虽然有一些非常糟糕 方式)而是关注 一贯地做到这一点。
我没有找到比“_”更好的澄清和一致性。缺点包括:
我通过在编辑器中关闭它们来解决问题,并尽量不要过多考虑CLS合规性。
答案 7 :(得分:0)
我同意@lomaxx,在整个团队中保持一致比让正确的惯例更为重要。
不过,这里有几个很好的地方可以获得编码约定的想法和指导:
答案 8 :(得分:0)
我更喜欢对私有字段使用下划线前缀。我使用小写的第一个字母作为方法参数。我遵循为方法使用小写camelcase参数的准则,我认为这比私有字段的命名更重要,因为它是类的API的一部分。 。 e.g。
Public Class Class1
Private _foo As String
Public Property Foo() As String
Get
Return _foo
End Get
Set(ByVal value As String)
_foo = value
End Set
End Property
Public Sub New(ByVal foo As String)
_foo = foo
End Sub
End Class
使用此模式,您将不会与C#或VB.NET中的私有字段和构造函数参数发生任何命名冲突。
答案 9 :(得分:0)
我同意最重要的不是人们使用的风格,而是一致的。
话虽如此,私有字段的新MS / .NET样式往往是_fooVar(下划线后跟camelCased名称)