23

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

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

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

4

10 回答 10

21

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

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

于 2008-08-11T09:45:27.967 回答
7

这是个人偏好,尽管有一些区别得到了广泛的支持。即使在 C# 中,我也不认为有一种广泛使用的约定。

杰夫普罗西斯

作为个人喜好的问题,我通常在私有字段前加上下划线 [在 C# 中] ...这种约定在 .NET 框架中使用得非常多,但并未自始至终使用。

来自 。NET Framework 设计指南第 2 版第 73 页。

杰弗里·里希特

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

来自 。NET Framework 设计指南第 2 版第 47 页。Anthony Moore(BCL 团队)也认为使用“m_”和“s_”值得考虑,第 48 页。

于 2010-06-10T12:10:12.510 回答
3

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

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

于 2008-08-11T09:46:46.480 回答
3

您链接的设计指南特别声明它们仅适用于静态公共和受保护字段。设计指南主要侧重于设计公共 API;您对私人会员的处理取决于您自己。我不是很肯定,但我相对有信心在编译器检查 CLS 合规性时不会考虑私有成员,因为只有公共/受保护成员才能参与其中(想法是,“如果有人使用的语言不允许 _ 字符尝试使用您的库?”如果成员是私有的,答案是“没什么,用户不必使用这些成员。”但如果成员是公开的,您就有麻烦了。 )

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

于 2008-08-28T18:36:15.347 回答
3

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

Public Property Foo As String
Public Property Foo2 As String

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

于 2011-08-29T20:55:31.463 回答
2

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

于 2008-08-11T09:48:17.100 回答
2

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

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

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

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

于 2008-08-12T15:57:52.753 回答
0

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

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

  1. Francesco Balena的 Microsoft Visual Basic 和 Visual C# 开发人员实用指南和最佳实践是一本很好的书,它解决了许多这些问题。
  2. IDesign 编码标准(用于 C# 和 WCF)
  3. .NET Framework源代码(在 VS2008 中)
于 2008-08-11T13:05:11.790 回答
0

我更喜欢对私有字段使用下划线前缀。我使用小写首字母作为方法参数。我遵循为方法使用小写驼峰式参数的准则,我认为这比私有字段的命名更重要,因为它是类 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 中的私有字段和构造函数参数有任何命名冲突。

于 2008-08-11T19:00:39.140 回答
0

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

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

于 2008-09-05T18:11:53.670 回答