来自C# 和 JavaScript 背景,我习惯于像这样复杂类型的变量声明:
//C# example
var streamWriter = new StreamWriter();
我从公司的另一部分继承了许多 VB.Net 项目,并且必须维护如下所示的代码:
'VB.Net example
Using SW As New StreamWriter(Path + "source.txt")
Dim W As New CsvWriter(SW, ",")
' additional code snipped
End Using
出于多种原因,当我向此代码库添加功能时,我想将这些变量重命名为类似于我和团队其他成员用于 C# 的样式。因此,代码如下所示:
Using streamWriter As New StreamWriter(Path + "source.txt")
Dim csvWriter As New CsvWriter(streamWriter, ",")
' additional code snipped
End Using
我知道 VB.Net 在变量名称方面"不区分大小写",因此:
Dim someVariable as String
Dim SomeVariable as String
导致警告"局部变量 SomeData 已在当前块中声明"。
但我不知道的是,我是否冒着风险或违反了一些常见的约定,因为我在 C# 中使用该类型的 camelCase 版本作为我的变量名?喜欢:
Dim cvsWriter as CvsWriter
标准中是否有某些内容或对 CLS 合规性的影响暗示我应该或不应该使用此约定?
标准中是否有某些内容或对 CLS 合规性的影响暗示我应该或不应该使用此约定?
有这样的准则:
可以在 CLR 上运行的语言不需要支持区分大小写,尽管有些语言支持区分大小写。即使您的语言支持它,其他可能访问您的框架的语言也不支持。因此,任何可从外部访问的 API 都不能仅依靠大小写来区分同一上下文中的两个名称。
X 不假定所有编程语言都区分大小写。他们不是。名称不能仅因大小写而异。
这里重要的一点仅凭情况。
在
Using streamWriter As New StreamWriter(Path + "source.txt")
,这两个streamWriter
单单不单就不同,它们的范围也不同。只要有其他东西可以区分名称(例如范围(,您就不会违反规则。
相反,如果要在 C# 中声明此枚举:
public enum Wtf
{
yes,
no,
Yes,
No
}
,它可以在 C# 中工作,但您将无法从例如 .VB 正确使用它,因为它在同一范围内定义了多个名称,这些名称仅因大小写而异。
(我在 API 中看到PayPal一个例子。如果不编辑自动生成的包装器代码,就不可能从 VB 使用它。
因此,当您声明自己的变量来保存类的实例时,您可以在该类之后命名该变量,您可以使用任何您想要的情况,并且它不应该破坏任何内容(如果是这样,则某些东西不符合 CLS(。
您不应该做的是创建一个公开可见的实体,其中相等的成员仅因大小写而异,例如类的两个属性或枚举的两个成员。