VB.NET 中是否有命名私有字段的官方约定?例如,如果我有一个名为“Foo”的属性,我通常将私有字段称为“_Foo”。这在国内似乎是不被允许的 官方指南:

“不要对字段名称使用前缀。例如,不要使用 g_ 或 s_ 来区分静态字段和非静态字段。”

在 C# 中,您可以调用私有字段“foo”、属性“Foo”,并在构造函数中将私有字段引用为“this.foo”。由于 VB.NET 不区分大小写,因此您无法执行此操作 - 有什么建议吗?

有帮助吗?

解决方案

我仍然在 VB 中对私有字段使用 _ 前缀,因此我将 _foo 作为私有字段,将 Foo 作为属性。我也为 C# 以及我编写的几乎所有代码执行此操作。一般来说,我不会太纠结于“什么是正确的方法”,因为并没有真正的“正确”的方法(尽管有一些非常糟糕的方法),而是关心始终如一地这样做。

最终,保持一致将使您的代码比使用任何一组“正确”约定更具可读性和可维护性。

其他提示

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

杰夫·普罗西斯

根据个人喜好,我通常在私有字段前添加下划线 [在 C# 中] ...此约定在 .NET 框架中使用较多,但并未在整个框架中使用。

来自 。NET 框架设计指南 第二版第 73 页。

杰弗里·里克特

我将所有字段设为私有,并在实例字段前加上“m_”前缀,在静态字段前加上“s_”[在 C# 中]

来自 。NET 框架设计指南 第二版第 47 页。安东尼·摩尔(首创团队)还认为使用“m_”和“s_”值得考虑,第 48 页。

官方指导方针就是这样——指导方针。你可以随时绕过他们。话虽如此,我们通常在字段中添加下划线前缀 两个都 C# 和 VB.NET。这种约定很常见(显然,官方指南被忽略了)。

然后可以在不使用“me”关键字的情况下引用私有字段(“this”关键字用于 C# :)

您链接的设计指南明确指出它们仅适用于静态公共和受保护字段。设计指南主要关注公共API的设计;您对私人成员的处理方式取决于您。我并不乐观,但我相对有信心,当编译器检查 CLS 合规性时,不会考虑私有成员,因为只有公共/受保护的成员才会在那里发挥作用(想法是,“如果有人使用以下语言怎么办?不允许 _ 字符尝试使用您的库?”如果成员是私有的,答案是“什么都没有,用户不必使用这些成员。”但如果成员是公共的,你就有麻烦了。 )

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

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

Public Property Foo As String
Public Property Foo2 As String

VB 自动创建名为 _Foo 和 _Foo2 的私有成员变量。微软和 VS 团队似乎已经采用了 _ 约定,所以我不认为它有问题。

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

我仍然将VB中的_前缀用于私有字段,因此我将_foo作为私有字段,而将foo作为属性。我也为C#做到这一点,几乎是我编写的任何代码。通常,我不会太过陷入“正确的方法”之中,因为没有真正的“正确”方式(尽管有一些非常糟糕的方式),而是关心这样做。

我还没有找到比“_”更好的澄清和一致性。缺点包括:

  • 不符合 CLS
  • 当 VB 在我的 IDE 上绘制水平线时往往会迷失方向

我通过在编辑器中关闭这些行来绕过这些行,并尽量不要过多考虑 CLS 合规性。

我同意@lomaxx,整个团队保持一致比拥有 正确的 习俗。

不过,这里有几个获得编码约定想法和指导的好地方:

  1. Microsoft Visual Basic 和 Visual C# 实用指南和最佳实践 Francesco Balena 的《开发人员》是一本很棒的书,解决了其中的许多问题。
  2. IDesign 编码标准 (对于 C# 和 WCF)
  3. .NET框架 源代码 (在VS2008中)

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

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 中的私有字段和构造函数参数发生任何命名冲突。

我同意最重要的不是一个人使用什么风格,而是它的一致性。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top