VB.NET不区分大小写;那种区分大小写?

时间:2012-12-13 09:08:21

标签: c# vb.net visual-studio-2010

这在C#

中没问题
private int total;
public int Total {
    get {
        return total;
    }
}

因此,支持字段total的拼写与Property Total的拼写相同,唯一的区别在于T

如果我尝试执行以下操作,则会VB.NET VS抱怨。事实上,它甚至不允许我用小写Return totalt并自动更正大写T

enter image description here

但如果我以不同方式拼写支持字段,那么它似乎没问题:

Private fTotal As Integer
Public ReadOnly Property Total() As Integer
    Get
        Return fTotal
    End Get
End Property

我意识到它们是不同的语言,但这种差异背后有合理的原因吗? ( EDIT 最初表示“明显不一致”而不是“差异”)

另外 - 我假设即使Visual Studio自动更正我的VB.NET的情况,但实际上这种语言不区分大小写?

5 个答案:

答案 0 :(得分:5)

  

我意识到它们是不同的语言,但这种明显的不一致背后是否有合理的原因?

最初的原因只是历史:VB基于BASIC,与当时的其他语言(FORTRAN)一样,不区分大小写(但通常以全大写形式编写)。

此外,我没有看到任何不一致:在VB内部,外壳完全一致。特别是,正如你的标题所要求的那样,它不是“一种区分大小写的”。

即使在今天, 是一个不区分大小写的逻辑原因:由于名称冲突,它更难引入错误;考虑以下C#代码:

private int total;

public int Total {
    get { return total; }
    set { Total = value; }
}

您是否立即发现错误?如果是这样,那就不错了(这里的语法高亮有帮助)。在VB中,这类错误不可能发生。但实际上我认为这类错误并不是那么有问题,因为一旦发现它们很容易被淘汰。因此,虽然这是不区分大小写的原因,但它并不是一个非常强大的原因。

最后,请注意Windows和OS X文件系统在这里使用与VB相同的约定:文件系统不区分大小写(文件名大小写无关紧要)但大小写意识 - 意味着文件系统保留文件名的原始大小并正确显示,但在比较时,不考虑大小写。

答案 1 :(得分:1)

VB.NET不区分大小写,它设计为易于学习Visual Basic程序员,并与Visual Basic共享此特性。

C#区分大小写,它与VB.NET不同。即使它们都用于.NET开发,它们也不必一致。您可以使用多种语言进行.NET开发,这些语言之间的差异很多,并且不限于区分大小写。

答案 2 :(得分:1)

有几点需要解决:

  • Visual Basic语言始终不区分大小写。如果您以一种方式声明变量并将其用于另一种变换器,则编译器不关心。

  • IDE(Visual Studio)将有助于修复变量用法的情况以匹配实际声明。您可以在设置中关闭它,但我从未尝试过,所以我不知道它是否真的可能。

现在回到你的代码:

Private total As Integer
Public ReadOnly Property Total() As Integer
    Get
        Return Total
    End Get
End Property

这里实际上有两个错误:

  1. 您有两个名称相同的成员,一个名为total的字段和一个名为Total的属性。它们的名称相同,因为它们不区分大小写(编译器会向您显示错误 - 屏幕截图中的蓝色波浪线)。

  2. IDE会自动将属性中的“total”更正为“Total”,因为您实际上是指属性,而不是字段。编译器不会因此而向您显示错误,但如果您要删除该字段(以便编译程序),您将在运行时遇到堆栈溢出,因为该属性会调用自身。请注意,即使您确实设法关闭IDE的自动更正,您仍然会引用该属性,因为它看起来不区分大小写。

答案 3 :(得分:0)

到目前为止,VB.Net编译器不区分大小写,出于所有意图和目的,它禁止使用具有相同名称的字段以及大写或小写字母的唯一区别。

底层CLI(公共语言接口)和CLR(公共语言运行库)确实支持大小写差异。但是给出的c#示例不是CLS有效的。

答案 4 :(得分:0)

实际上,这里的问题与名为“total”的不同案例字段无关。如果删除该字段,您将看到同样的问题。

问题是VB允许您通过名为与属性或函数相同的隐藏局部变量来选择性地设置属性或函数返回的值,然后返回该隐藏变量。

e.g., this will work:
Public ReadOnly Property Total() As Integer
    Get
        Total = 3  'setting the hidden VB variable
        Return Total 'returning the hidden VB variable
    End Get
End Property

VB甚至允许在这种情况下省略return语句:

Public ReadOnly Property Total() As Integer
    Get
        Total = 3  'setting the hidden VB variable
    End Get 'since the hidden VB variable was set, it is returned implicitly
End Property

这些VB-isms可能会让人很难解释VB代码中真正发生的事情。