在VB.NET中使用Dim foo As Foo有什么问题吗?

Sam*_*ury 4 c# vb.net coding-style case-sensitive case-insensitive

在最近的VB.NET项目中,我采用了我习惯在C#中使用的命名约定.也就是说,经常调用与它引用的类相同的变量,只有不同的情况,例如

Foo foo = new Foo(); // C#

Dim foo As New Foo() ' VB.NET
Run Code Online (Sandbox Code Playgroud)

我发现这通常是编写代码的最清晰的方法,特别是对于小方法.这种编码风格显然在C#中运行良好,区分大小写,并且由于Visual Studio提供的语法高亮,很容易看出类名和变量名是不同的.

然而,令我惊讶的是,在VB.NET中,这几乎在100%的时间内都能正常工作.唯一的问题是变量名称似乎具有多重身份.即它可以用于调用Foo类的实例方法和共享(静态)方法.这并没有真正引起任何问题,只是意味着Intellisense会在你点击''后提供包含静态和实例方法的列表.变量名后面.

我惊讶地发现,这实际上并没有导致我的项目出现任何混乱,到目前为止它已经非常成功了!但是,我是唯一一个从事这个特定​​项目的人.

这是一个稍长的例子:

Dim collection as Collection = New Collection()
For Each bar As Bar in Bar.All()
    collection.SomeInstanceMethod(bar)
Next
collection.SomeSharedMethod()
Run Code Online (Sandbox Code Playgroud)

*我发现的唯一问题是,有时候'重命名'重构工具会混淆,即重命名一个类时,它会重命名与类同名的变量,在它们的声明行(Dim foo As...)中,但不是对该变量的其他引用,导致编译器问题(duh).这些总是很容易纠正.

另一个小烦恼是VB.NET语法高亮显示器没有突出显示类名与变量名的任何不同,使得它不如在C#中使用它时那么好.我仍然发现代码非常易读.

还有其他人试图在团队环境中允许这个吗?在VB.NET中这个命名约定是否还有其他潜在的问题?

Moa*_*ini 7

尽管VB不区分大小写,但编译器足够智能,不会在对象实例和类之间混淆.

但是,在不区分大小写的语言中使用相同的名称肯定是非常危险和错误的!特别是如果其他程序员正在从事该项目.