Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在VB.NET中将Dim foo用作foo是否存在问题?_C#_Vb.net_Coding Style_Case Sensitive_Case Insensitive - Fatal编程技术网

C# 在VB.NET中将Dim foo用作foo是否存在问题?

C# 在VB.NET中将Dim foo用作foo是否存在问题?,c#,vb.net,coding-style,case-sensitive,case-insensitive,C#,Vb.net,Coding Style,Case Sensitive,Case Insensitive,在最近的一个VB.NET项目中,我采用了我在C#中习惯使用的命名约定。也就是说,通常调用与它引用的类同名的变量,只是大小写不同,例如 Foo foo = new Foo(); // C# Dim foo As New Foo() ' VB.NET 我发现这通常是编写代码的最清晰的方式,特别是对于小方法。这种编码风格显然在C#中工作得很好,区分大小写,而且由于Visual Studio提供的语法突出显示,很容易看出类名和变量名是不同的 然而,令我惊讶的是,在VB.NET中,这种方法在几乎100

在最近的一个VB.NET项目中,我采用了我在C#中习惯使用的命名约定。也就是说,通常调用与它引用的类同名的变量,只是大小写不同,例如

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

Dim foo As New Foo() ' VB.NET
我发现这通常是编写代码的最清晰的方式,特别是对于小方法。这种编码风格显然在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()
*我发现的唯一问题是,有时“重命名”重构工具会混淆,即在重命名一个类时,它会在声明行中重命名与该类同名的变量(
Dim foo as…
),而不是对该变量的其他引用,从而导致编译器问题(duh)。不过,这些都很容易纠正

另一个小麻烦是VB.NET语法highlighter突出显示类名与变量名没有任何区别,这使得它不如在C#中使用它时好。尽管如此,我仍然觉得代码可读性很强


有没有其他人尝试过在团队环境中允许这样做?VB.NET中的这种命名约定还有其他潜在问题吗?

VB.NET不区分大小写!这相当于:

Foo Foo = new Foo(); // C#
作为团队环境中的标准,我们将使用:

Dim oFoo as New Foo 'VB.NET

虽然VB不区分大小写,但编译器足够智能,不会混淆对象实例和类


然而,在不区分大小写的语言中使用相同的名称肯定是非常危险和错误的!特别是当其他程序员在做这个项目时,

我必须在VB和C语言之间来回移动,我们考虑这个很差的练习。我们也不喜欢让C#中的变量名只根据大小写与它们的类型不同。相反,我们使用一个uu前缀或给它一个更有意义的名称

每当你开始学习一门新的语言时,你不可避免地会注意到一些不同的事情,并错过了旧的做事方式。通常这是因为您最初不知道其他语言中解决相同问题的不同功能。由于您是VB新手,以下是一些有助于您完成任务的注释:

说VB.Net不区分大小写不是100%正确的,除非您还指出它区分大小写。当您声明variableidentifier时,IDE将记录您使用的情况,并自动更正其他使用以匹配该情况。您可以使用此功能来帮助发现输入错误或IDE可能会混淆变量或类型的地方。事实上,我更喜欢这种区分大小写的方案

VB.Net以不同的方式导入名称空间。如果要使用
文件
类,只需说
IO.File
,无需在顶部导入
System.IO
。在学习具有几个嵌套名称空间层的新API时,该功能尤其有用,因为您可以导入API的顶级部分,键入下一个名称空间名称,然后系统会提示您该名称空间中的类列表。这里很难解释,但是如果你寻找它并开始使用它,当你回到C#时,你会非常想念它。最主要的是,至少对我来说,它确实打断了我的流程,因为我需要跳到文件的顶部,为我可能只使用一两次的名称空间添加另一个using指令。在VB中,这种中断不太常见


Net做后台编译。光标离开一行时,您就知道该行是否编译。这在某种程度上弥补了不突出显示类名的不足,因为这在C#中之所以有用,部分原因是为了让您知道键入的类名是正确的。VB.Net在这方面给了您更多的信心。

正如Moayad所指出的那样,编译器可以分辨出不同之处——但这是一种不好的做法,可能会导致维护问题和其他副作用


更好的做法是尝试在使用变量的上下文中命名变量,而不仅仅是类型名。这导致了代码的自文档化,并且需要更少的注释(注释被大量滥用作为编写密集代码的借口)。

我过去也做过同样的事情。不过,我开始远离它,因为VisualStudio在自动格式化代码并将静态方法调用的大小写更改为小写时,有时会感到困惑。这比不能仅按大小写区分变量名和类名更烦人。但是,纯粹从技术角度来看,它不应该引起任何问题。

只要编译器始终能够判断
Foo
是指类还是变量,那么它才是安全的,最终你会遇到无法判断的情况。埃里克·利珀特(Eric Lippert)讨论了可能出错的事情。

我不同意这里的其他答案。。。我认为这样做没有任何问题。我经常这样做,绝对没有任何问题

如果使用小写字母作为变量名,则可以轻松区分变量和类型,并且编译器不会混淆这两个标识符

如果你愿意