在 VB.NET 中命名私有字段是否有官方约定?例如,如果我有一个名为“Foo”的属性,我通常将私有字段称为“_Foo”。这似乎在官方指南中不受欢迎:
“不要为字段名称使用前缀。例如,不要使用 g_ 或 s_ 来区分静态字段和非静态字段。”
在 C# 中,您可以调用私有字段“foo”、属性“Foo”,并在构造函数中将私有字段称为“this.foo”。由于 VB.NET 不区分大小写,因此您不能这样做 - 有什么建议吗?
在 VB.NET 中命名私有字段是否有官方约定?例如,如果我有一个名为“Foo”的属性,我通常将私有字段称为“_Foo”。这似乎在官方指南中不受欢迎:
“不要为字段名称使用前缀。例如,不要使用 g_ 或 s_ 来区分静态字段和非静态字段。”
在 C# 中,您可以调用私有字段“foo”、属性“Foo”,并在构造函数中将私有字段称为“this.foo”。由于 VB.NET 不区分大小写,因此您不能这样做 - 有什么建议吗?
我仍然在 VB 中将 _ 前缀用于私有字段,因此我将 _foo 作为私有字段,将 Foo 作为属性。我也为 c# 以及我编写的几乎所有代码执行此操作。一般来说,我不会太拘泥于“什么是正确的做法”,因为没有真正的“正确”方法(尽管有一些非常糟糕的方法),而是关心始终如一地做这件事。
归根结底,与使用任何“正确”约定相比,保持一致将使您的代码更具可读性和可维护性。
这是个人偏好,尽管有一些区别得到了广泛的支持。即使在 C# 中,我也不认为有一种广泛使用的约定。
作为个人喜好的问题,我通常在私有字段前加上下划线 [在 C# 中] ...这种约定在 .NET 框架中使用得非常多,但并未自始至终使用。
来自 。NET Framework 设计指南第 2 版第 73 页。
我将所有字段设为私有,并在实例字段前面加上“m_”,在静态字段前面加上“s_”[在 C# 中]
来自 。NET Framework 设计指南第 2 版第 47 页。Anthony Moore(BCL 团队)也认为使用“m_”和“s_”值得考虑,第 48 页。
官方指导方针就是——指导方针。你总是可以绕过他们。话虽如此,我们通常在 C# 和 VB.NET 中为字段添加下划线前缀。这种约定很常见(显然,官方指南被忽略了)。
然后可以在没有“me”关键字的情况下引用私有字段(“this”关键字用于 C# :)
您链接的设计指南特别声明它们仅适用于静态公共和受保护字段。设计指南主要侧重于设计公共 API;您对私人会员的处理取决于您自己。我不是很肯定,但我相对有信心在编译器检查 CLS 合规性时不会考虑私有成员,因为只有公共/受保护成员才能参与其中(想法是,“如果有人使用的语言不允许 _ 字符尝试使用您的库?”如果成员是私有的,答案是“没什么,用户不必使用这些成员。”但如果成员是公开的,您就有麻烦了。 )
就是说,我要补充一下回声室,并指出无论你做什么,保持一致很重要。我的雇主要求 C# 和 VB 中的私有字段都以 _ 为前缀,因为我们都遵循这个约定,所以很容易使用其他人编写的代码。
在 VB.NET 4.0 中,你们中的大多数人可能知道不需要为属性声明显式编写 getter 和 setter,如下所示:
Public Property Foo As String
Public Property Foo2 As String
VB 自动创建名为_Foo 和_Foo2 的私有成员变量。似乎微软和 VS 团队已经采用了 _ 约定,所以我认为它没有问题。
我认为没有正式的命名约定,但我看到微软在 Microsoft.VisualBasic dll 中使用 m_ (通过反射器)。
我仍然在 VB 中将 _ 前缀用于私有字段,因此我将 _foo 作为私有字段,将 Foo 作为属性。我也为 c# 以及我编写的几乎所有代码执行此操作。一般来说,我不会太拘泥于“什么是正确的做法”,因为没有真正的“正确”方法(尽管有一些非常糟糕的方法),而是关心始终如一地做这件事。
我没有找到比“_”更好的澄清和一致性。缺点包括:
我通过在编辑器中关闭这些来绕过这些线路,并尽量不要过多考虑 CLS 合规性。
我同意@lomaxx,在整个团队中保持一致比拥有正确的约定更重要。
不过,这里有几个很好的地方可以获得编码约定的想法和指导:
我更喜欢对私有字段使用下划线前缀。我使用小写首字母作为方法参数。我遵循为方法使用小写驼峰式参数的准则,我认为这比私有字段的命名更重要,因为它是类 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(下划线后跟驼峰式名称)