【问题标题】:Naming convention for VB.NET private fieldsVB.NET 私​​有字段的命名约定
【发布时间】:2008-08-11 09:41:11
【问题描述】:

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

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

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

【问题讨论】:

  • 这些官方指南是用于开发类库的,并且仅适用于 public 元素而不适用于私有元素。

标签: vb.net convention


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    Jeff Prosise

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

    来自 .NET Framework Design Guidelines 第 2 版第 73 页。

    Jeffrey Richter

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

    来自 .NET Framework Design Guidelines 2nd Edition 第 47 页。Anthony Moore (BCL team) 也认为使用“m_”和“s_”值得考虑,第 48 页。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

          Public Property Foo As String
          Public Property Foo2 As String
          

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              【解决方案7】:

              我仍然在 VB 中使用 _ 前缀 私有字段,所以我将 _foo 作为 私有字段和 Foo 作为 财产。我也为 c# 执行此操作,并且 几乎我写的任何代码。 一般来说,我不会太着迷 在“什么是正确的做法” 因为没有真正的“权利” 方式(虽然有一些非常糟糕的 方式),而是关注 始终如一地这样做。

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

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

              【讨论】:

              • CLS 合规性不关心私有字段名称。
              【解决方案8】:

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

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

              1. Practical Guidelines and Best Practices for Microsoft Visual Basic and Visual C# Francesco Balena 的《开发者》是一本很好的书,它解决了许多此类问题。
              2. IDesign Coding Standards(用于 C# 和 WCF)
              3. .NET Framework Source Code(在 VS2008 中)

              【讨论】:

                【解决方案9】:

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

                【讨论】:

                  【解决方案10】:

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

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-07-23
                    相关资源
                    最近更新 更多