VB.NET专用字段的命名约定

VB.NET专用字段的命名约定

Naming convention for VB.NET private fields

在VB.NET中是否有命名私有字段的官方约定? 例如,如果我有一个名为" Foo"的属性,通常我将私有字段称为" _Foo"。 《官方指南》似乎对此不赞成:

"不要为字段名使用前缀。例如,不要使用g_或s_来区分静态字段和非静态字段。"

在C#中,您可以调用私有字段'foo',属性'Foo',并在构造函数中将私有字段称为'this.foo'。 由于VB.NET不区分大小写,因此您不能这样做-有什么建议吗?


我仍然在VB中为私有字段使用_前缀,因此我将_foo作为私有字段,并将Foo作为属性。我也为c#和几乎所有我编写的代码执行此操作。通常,我不会太着迷于"什么是正确的方法",因为实际上并没有"正确"的方法(尽管有一些非常糟糕的方法),而是要始终如一地关注它。

归根结底,与使用任何"正确"约定相比,保持一致将使您的代码更具可读性和可维护性。


这是个人喜好,尽管人们普遍支持区分。即使在C#中,我也认为没有一种广泛使用的约定。

杰夫·普罗塞斯说

As a matter of personal preference I typically prefix private fields with an underscore [in C#] ... This convention is used quite a lot in the .NET framework but it is not used throughout.

摘自.NET Framework设计指南第二版第73页。

杰弗里·里希特说

I make all my fields private and I prefix my instance fields with"m_" and my static fields with"s_" [in C#]

摘自《 .NET Framework设计指南第二版》第47页。Anthony Moore(BCL团队)还认为值得考虑使用" m_"和" s_",第48页。


在VB.NET 4.0中,大多数人可能都知道您不需要为Property声明显式编写getter和setter,如下所示:

1
2
Public Property Foo As String
Public Property Foo2 As String

VB自动创建称为_Foo和_Foo2的私有成员变量。 似乎Microsoft和VS团队已采用_约定,因此我认为没有问题。


您专门链接的设计指南指出,它们仅适用于静态的公共字段和受保护的字段。设计指南主要侧重于设计公共API。您对私人成员的处理取决于您自己。我不是很肯定,但是我比较有信心,在编译器检查CLS遵从性时不会考虑使用私有成员,因为只有公共/受保护的成员才能在那里参加比赛(想法是,"如果某人使用的语言不允许_字符尝试使用您的库?"如果成员是私有的,答案是"没有,用户不必使用这些成员。"但是,如果成员是公开的,则您会遇到麻烦。 )

就是说,我要添加回声室,并指出无论您做什么,保持一致都是很重要的。我的雇主要求C#和VB中的私有字段都以_为前缀,并且由于我们所有人都遵循此约定,因此很容易使用其他人编写的代码。


官方准则就是准则。您可以随时绕过它们。话虽这么说,我们通常在C#和VB.NET中都用下划线为字段添加前缀。该约定非常普遍(显然,《官方指南》被忽略了)。

然后可以引用没有" me"关键字的私有字段(" this"关键字用于C#:)


I still use the _ prefix in VB for
private fields, so I'll have _foo as
the private field and Foo as the
property. I do this for c# as well and
pretty much any code I write.
Generally I wouldn't get too caught up
in"what is the right way to do it"
because there isn't really a"right"
way (altho there are some very bad
ways) but rather be concerned with
doing it consistently.

为了澄清和保持一致,我找不到比" _"更好的东西。缺点包括:

  • 不符合CLS
  • 当VB在我的IDE上绘制水平线时,容易迷路

我通过在编辑器中将其关闭来解决这些问题,并尽量不要过多考虑CLS遵从性。


我认为没有正式的命名约定,但是我已经看到Microsoft在Microsoft.VisualBasic dll(通过反射器)中使用m_。


我同意最重要的不是一种风格,而是一致的。

话虽如此,专用字段的新MS / .NET样式往往是_fooVar(下划线后跟驼峰名称)


我更喜欢对私人字段使用下划线前缀。我将小写的第一个字母用作方法参数。我遵循为方法使用小写驼峰参数的准则,我认为这比私有字段的命名更为重要,因为它是类API的一部分。 。例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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中不会与私有字段和构造函数参数发生任何命名冲突。


我同意@lomaxx,在整个团队中保持一致比拥有正确的约定更为重要。

尽管如此,这里还是几个获取编码约定思想和指导的好地方:

  • Francesco Balena撰写的Microsoft Visual Basic和Visual C#开发人员的实用指南和最佳实践是一本很好的书,它解决了许多这些问题。
  • IDesign编码标准(用于C#和WCF)
  • .NET Framework源代码(在VS2008中)

  • 推荐阅读