VB真的不区分大小写吗?

问题描述 投票:113回答:14

我不打算在这里开始论证,但无论出于何种原因,通常会说Visual Basic不区分大小写并且C语言不是(并且在某种程度上这是一件好事)。

但这是我的问题:Visual Basic在哪里确实不区分大小写?当我输入...

Dim ss As String
Dim SS As String

...进入Visual Studio 2008Visual Studio 2010 IDE,第二个警告“局部变量SS已在当前块中声明”。在VBA VBE中,它不会立即引发错误,而只是自动更正案例。

我在这里错过了一些关于Visual Basic不区分大小写的论点吗? (另外,如果你知道或想要回答,为什么这会是一件坏事?)

为什么我甚至都会问这个问题?

我已经在很多方言中使用过Visual Basic多年了,有时作为业余爱好者,有时候用于工作组中的小型商业相关程序。截至过去六个月,我一直致力于一个比我预期的大得多的大项目。许多示例源代码都在C#中。我没有任何学习C#的强烈愿望,但如果有些东西我错过了C#提供的Visual Basic没有(相反的是VB.NET提供XML Literals),那么我想了解该功能的更多信息。所以在这种情况下,经常认为C语言是区分大小写的,这很好,Visual Basic不区分大小写,这很糟糕。我想知道...

  1. Visual Basic如何区分大小写,因为代码编辑器中的每个示例都会区分大小写(意味着案例得到纠正),无论我是否需要它。
  2. 如果VB.NET案例以某种方式限制我可以用代码做什么,这对我来说是否足以让我考虑转移到C#?
vb.net vba case-sensitive case-insensitive
14个回答
100
投票

VBA和VB.NET之间的区别仅仅是因为VB.NET在后台连续编译。编译VBA时会出错。

Jonathan says一样,编程时除了字符串比较,XML和其他一些情况外,您可以将VB.NET视为不区分大小写...

我觉得你对引擎盖下的内容很感兴趣。那么,.NET公共语言运行时区分大小写,并且VB.NET代码依赖于运行时,因此您可以看到它在运行时必须区分大小写,例如当它在查找变量和方法时。

VB.NET编译器和编辑器让你忽略它 - 因为它们纠正了代码中的大小写。

如果您使用动态功能或后期绑定(Option Strict Off),您可以证明基础运行时区分大小写。另一种看待这种情况的方法是认识到像C#这样的区分大小写的语言使用相同的运行时,因此运行时显然支持区分大小写。

编辑如果你想让IDE脱离等式,你可以随时使用compile from the command-line。在Notepad中编辑代码,使其具有ssSS,并查看编译器的功能。

编辑引自Jeffrey Richter.NET Framework Design Guidelines第45页。

需要说明的是,CLR实际上是区分大小写的。某些编程语言(如Visual Basic)不区分大小写。当Visual Basic编译器尝试解析对像C#这样的区分大小写的语言中定义的类型的方法调用时,编译器(而不是CLR)会计算方法名称的实际情况并将其嵌入元数据中。 CLR对此一无所知。现在,如果您使用反射绑定到方法,则反射API确实能够执行不区分大小写的查找。这是CLR提供不区分大小写的程度。


1
投票

我只能提供这一点,正如我在80年代早期的编程文本书中回忆的那样,感觉语言是(当时)严格意图减少编译时错误。也就是说,“严格性”旨在开发更高精度的编码规则。事实证明,添加了适当的变量,类,方法,函数以及其他任何你希望放在那里的标记,也在不断发展。

我记得几乎所有的这些书都包括一个推荐的大写字母,小写字母等模式。众所周知,除了高端制作公司之外,其中大部分被抛弃或应该说,在实践中被忽略了, CASE解决方案,或者那些技能水平较高的解决方案。我想每个人都会经历这种学习曲线。

鉴于这些语言和IDE的进步,更好的问题是,哪种语言可以改善我的开发时间?当然,如果您不熟悉各种语言,您的选择是有限的。


1
投票

我会尽力回答你的第二个问题。

“如果VB.NET案例在某种程度上限制了我对代码的处理能力,那么这对我来说是否足以让我考虑转向C#?”

使用C#创建WCF WebService。创建一个DataContract(1个类)。一个带有“字符串电子邮件”属性。另一个用“string Email”作为另一个属性。您选择理解为个人电子邮件或办公室电子邮件。或者它可能在两个不同的DataContracts中。

对于C#,这很好。 Web服务创建得很好。一个C#程序可以轻松创建一个WSDL,一切都很好。

现在尝试使用VB(任何版本)创建WSDL。它会说已经声明了“email”并且WSDL生成失败了。

像大家一样,我认为这是VB语言的一个缺点。但!!!

使用FxCOP并分析原始C#代码。 FxCOP说使用电子邮件/电子邮件是一个问题。建议使用不同名称支持不区分大小写。另请注意,到目前为止,.NET框架有106种编程语言,并且有许多语言具有区分大小写的ON。我们都在向云计算发展,并希望所有编程平台/语言都能访问我们的服务。

所以区分大小写是你在程序中的选择,如果你是C家伙,你会喜欢它。如果该程序将被其他非C程序使用/访问,则需要支持不区分大小写,但您的语言是您的选择。

http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Visual_Basic_.NET http://www.vbrad.com/article.aspx?id=65


1
投票

隐藏符号(例如,本地隐藏字段)也不区分大小写。

这是一个example

Public Class C
    Public Name As String

    Public Function M(name As String) As Boolean
        Return String.Equals(name, Name) ' case differs
    End Function
End Class

VB.NET编译器的输出被反编译为(因此相当于)以下C#:

public class C
{
    public string Name;

    public bool M(string name)
    {
        return string.Equals(name, name); // both lowercase
    }
}

string.Equals两次通过该领域。无论如何,本地都是隐藏的。该语言不区分大小写。

要显式引用某个成员(例如此字段),您必须通过Me取消引用该成员:

Return String.Equals(name, Me.Name) ' differentiate field from local

0
投票

我最近没有看到有人对你明确的第二个问题发表评论:“2:如果VB.NET案例在某种程度上限制了我对代码的处理能力,那么这是否足以让我考虑转向C#?”

我更喜欢C#让程序员选择是否限制程序员选项的更多选项方法。我更喜欢C#,但仅仅因为区分大小写,我甚至认为它只是因为区分大小写而接近学习语言。所有的功能都是重要的,当我看到C#和VB.NET的优点时,我更喜欢C#。但是我会给你一个真正平衡的观点,偏见是的,因为我有偏好,但我也会诚实地说明C#的缺点。

首先,两种语言都有优点和缺点。你可以用一种语言在另一种语言中做的差异正在减少,因为幸好微软正在改进这两种语言,而且他们似乎并没有对这两种语言表现出不公平的偏袒。

当C#第一次出现时,VB没有你可以放在方法之前的XML注释,我喜欢在C#中。我讨厌在VB.NET中。但是我多年来看到,许多不在一种语言中的功能会被添加到另一种语言中。 (同一个MS开发团队同时开发C#和VB,因此这些功能应该变得非常相似。)

但是你问过VB没有的C#。这里有一些我能立刻想到的:

1:C#更简洁,打字更少..在很多方面!我甚至看到愚蠢的说话时,相反的主张,VB节省打字。但请听那些告诉你他们使用这两种语言的人,他们也很少使用这两种语言。我在家里使用C#和VB,C#,因为我喜欢它(当我在工作中使用C#时),而我最近的工作要求我使用VB而不是C#。所以我现在更频繁地使用VB(现在大约10个月),但在我个人的证词中,我更喜欢C#,而在实际打字方面,VB的打字要多得多。我读过的一个例子是有人真正试图说VB更简洁,在with中给出一个带有长变量的'with ...'示例,所以在VB中,你可以只使用'.property'。声称VB需要更少打字是愚蠢的。有一些东西(而不仅仅是这个例子)VB更短,但在实际操作中C#更简洁的时候还有很多次。

但我认为C#更简洁的最大原因是VB的冗长的“IF / THEN”语句。如果陈述很常见。在C#中没有'then'字样可以输入! :)所有'end ...'语句都采用c#中的键入,通常只是一个右括号'}'。我读过有些人声称VB.NET中的这种更加冗长是VB的一个优点,因为几个结束的块语句/符号可以嵌套并紧接着彼此结束,但我非常不同意。一个人几乎总能在C#或VB中编写程序比另一个程序员更好,因为下一个代码修订可以设计得更好。这适用于'混淆C#中的众多结束括号'加上如果嵌套的块都是几个嵌套的IF的相同类型,那么VB遇到与C#中相同的问题。这在VB中没有优势。这种情况正是我想用两种语言评论我的结束符号或结束语的原因。是的,这更加冗长,但无论使用哪种语言,您都可以选择明确,这在基于判断的情境特定案例中非常重要。我认为代码清晰度非常重要。

2:VB没有多行注释。当我使用VB时我并不介意。然后我去了一些C风格的语言。现在我回来大多使用VB.NET工作,我想念他们。它只是你觉得方便的东西,然后不得不输。 :(

3:VB的'andalso'和'orelse'相当恼人,在C#中键入所有内容只是'&&'和'||'。再次,减少打字。这在我和VB和C#的代码中并不罕见。如果有的话,对于功能性而言,'OR'与'OrElse'通常无关紧要,除非'OrElse'对于计算机来说更快,所以如果程序员在VB中使用'Or'和'And',那么它会产生不太优化的代码喜欢清晰代码的人。 '或'比'OrElse'更容易撇去。

4:C#中代码放置的灵活性更高。当一行很长并且你想将它包装在下一行时,我讨厌VB.NET的'控制'重新调整我的代码。 C#做了一点,但我发现它在C#中更有用,在VB中,它更具控制性。但这更像是VB.NET IDE与C#IDE而不是语言本身。但我不知道你是否想要这两种或纯粹的语言功能没有IDE差异。

5:我真的很想念的只是在C#中创建一个新的代码块,我可能在一个方法中发生了很多事情,我想在一个非常小的代码块中声明一个变量但是没有在该块之外声明该变量整个方法。在C#中,我们可以使用'{'创建一个新块,并以'}'结束它。 VB没有这样的功能,但它最接近的匹配是无条件的'If True Then'和'End If'块。 (注意2字符C#vs 18字符VB.NET等效...更多在VB中输入。)

6:自增和递减运算符:++和 - 如myVariable++++myVariable或等效的减量版本。这非常方便......有时候。这是我错过C#时的实际代码示例:

// C#:
while (txt.Length > x)
{
    thisChar = txt[x];
    if (charsAllowedWithoutLimit.Contains(thisChar)) { ++x; }
    else if (allowLettersWithoutLimit && char.IsLetter(thisChar)) { ++x; }
    else if ((x2 = charsAllowedWithLimit.IndexOf(thisChar)) >= 0)
    {
        ++x; if (++usedCountA[x2] > charAllowedLimit[x2]) { break; }
    }
    else { break; }
}

' VB.NET:
While (txt.Length > x)
    thisChar = txt(x)
    If (charsAllowedWithoutLimit.Contains(thisChar)) Then
        x += 1
    ElseIf (allowLettersWithoutLimit AndAlso Char.IsLetter(thisChar)) Then
        x += 1
    Else
        x2 = charsAllowedWithLimit.IndexOf(thisChar)
        If (x2 >= 0) Then
            x += 1
            usedCountA(x2) += 1S
            If usedCountA(x2) > charAllowedLimit(x2) Then Exit While
        Else
            Exit While
        End If
    End If
End While

只是为了给C#规则提供一个非常好的例子,这是我个人最近编写的代码:

// C#
public static bool IsNotWithin(this Byte   v, Byte   v1, Byte   v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this SByte  v, SByte  v1, SByte  v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this Int16  v, Int16  v1, Int16  v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this Int32  v, Int32  v1, Int32  v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this Int64  v, Int64  v1, Int64  v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this UInt16 v, UInt16 v1, UInt16 v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this UInt32 v, UInt32 v1, UInt32 v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this UInt64 v, UInt64 v1, UInt64 v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this Decimal v, Decimal v1, Decimal v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }

public static bool IsWithin(this Byte   v, Byte   v1, Byte   v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this SByte  v, SByte  v1, SByte  v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this Int16  v, Int16  v1, Int16  v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this Int32  v, Int32  v1, Int32  v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this Int64  v, Int64  v1, Int64  v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this UInt16 v, UInt16 v1, UInt16 v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this UInt32 v, UInt32 v1, UInt32 v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this UInt64 v, UInt64 v1, UInt64 v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this Decimal v, Decimal v1, Decimal v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }

' And the VB equivalent is a mess! Here goes:
<Extension()>
Public Function IsNotWithin(v As Byte, value1 As Byte, value2 As Byte) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsNotWithin(v As SByte, value1 As SByte, value2 As SByte) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsNotWithin(v As Int16, value1 As Int16, value2 As Int16) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

' the % suffix means 'As Integer' in VB.
<Extension()>
Public Function IsNotWithin(v%, value1%, value2%) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

' the & suffix means 'As Long' in VB.
<Extension()>
Public Function IsNotWithin(v&, value1&, value2&) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsNotWithin(v As UInt16, value1 As UInt16, value2 As UInt16) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsNotWithin(v As UInt32, value1 As UInt32, value2 As UInt32) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsNotWithin(v As UInt64, value1 As UInt64, value2 As UInt64) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

' the @ suffix means 'As Decimal' in VB.
<Extension()>
Public Function IsNotWithin(v@, value1@, value2@) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsWithin(v As Byte, value1 As Byte, value2 As Byte) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

<Extension()>
Public Function IsWithin(v As SByte, value1 As SByte, value2 As SByte) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

<Extension()>
Public Function IsWithin(v As Int16, value1 As Int16, value2 As Int16) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

' the % suffix means 'As Integer' in VB.
<Extension()>
Public Function IsWithin(v%, value1%, value2%) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

' the & suffix means 'As Long' in VB.
<Extension()>
Public Function IsWithin(v&, value1&, value2&) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

<Extension()>
Public Function IsWithin(v As UInt16, value1 As UInt16, value2 As UInt16) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

<Extension()>
Public Function IsWithin(v As UInt32, value1 As UInt32, value2 As UInt32) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

<Extension()>
Public Function IsWithin(v As UInt64, value1 As UInt64, value2 As UInt64) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

' the @ suffix means 'As Decimal' in VB.
<Extension()>
Public Function IsWithin(v@, value1@, value2@) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

也许这是证明C#更简洁的证据。但并非所有程序员都喜欢简洁。有些人喜欢读“如果a <b then ...”,因为它对他们的人类语言来说更自然。那很好。偏好很好。对我来说,手工努力是我的价值因素,我认为任何人都可以习惯用他们喜欢的任何符号思考,因为“if”和“then”是字母表的符号,而C#的“if(条件)语句”;语法也是符号。一个更接近非程序员的语法而不是另一个。我更喜欢简洁的一个。

我还认为需要在VB中的字符文字之后使用'c'来使其成为字符文字而不是字符串是令人讨厌的。我更喜欢C#的简洁性。当一个方法需要一个字符文字时,你需要提供一个字符而不是一个字符长度的字符串,所以有时你被迫在VB中使用":"c而在C#中它是':'。我认为这是挑剔的。

公平地说,我会说我喜欢VB,比如不必在方法调用之后放空括号,比如Dim nameUpper$ = name.ToUpperInvariant,其中C#需要空括号:string nameUpper = name.ToUpperInvariant()。或者像修剪它一样加倍:Dim nameUpper$ = name.Trim.ToUpperInvariant vs string nameUpper = name.Trim().ToUpperInvariant()。我喜欢VB简洁地使用我如何使用上面的$来调暗它'As String',其中C#没有那些快捷方式。 VB有String,Integer,Long,Decimal,Single和Double类型的快捷方式,但缺点是它不太清楚,所以我谨慎使用它。但是,我更喜欢简洁的代码。

嗯,这只是这位经验丰富的程序员的一些注意事项,而且正如我所想,这是我对C#vs VB的编程“见证”。在我看来,这两种语言都很好。但是,我还是更喜欢C#。

附:由于我计划在我生命中的大部分时间进行编程,我甚至重新学会使用最有效的键盘进行打字:Dvorak键盘,其输入英语的成本比Qwerty键盘高出1/3。查一查也许你可能也想转换。 ;)它使我的打字容易67%! :)我鼓励任何人开箱即用,并评估你的工作效率。 Dvorak Simplified Keyboard Layout和C#为我做了这个。 :)

P.S.S.我会将Dvorak和C#与公制进行比较,而不是Qwerty键盘布局和VB进行Empirial测量。 Dvorak,metric和C#只是'干净'。但VB并不是很落后。但它确实需要向后兼容旧的VB6代码和.NET代码,如'Or'vs'OrElse'和'IIF()'。

我谨慎行事。听听那些不知道他们在说什么的人会更加谨慎。对VB和C#的所有缺点都有一半不再是任何问题了,人们仍然发布他们对这种语言中确实存在的缺点一无所知。我能想到的最好的例子是在VB中使用三个撇号或在C#中使用三个斜杠注释符号的方法的XML注释。但请自己辨别一个人是从无知或经验中说出来的。个人见证意味着他们从真实的经历中知道。在有人有很多经验之后,你就会振作起来。我在C#和VB方面都有超过10年的经验。它归结为:两者都是(非常)好的语言。而且大多数差异,您可以在阅读代码后的5分钟内立即看到。但是,其他功能可能需要数年才能找到障碍。我知道的一个障碍(在C#中),我甚至无法想到它会有用的真实生活情况。所以也许它毕竟不是一个障碍。

快乐的编码!


0
投票

VB.NET是不区分大小写的。

例子:

1.

Dim a As Integer
Dim A as Integer

2.

Sub b()
    'Some statement(s) here
End Sub
Sub B()
    'Some statement(s) here
End Sub

3.

Function c() As Integer
    'Some statement(s) here
End Function
Function C() As Integer
    'Some statement(s) here
End Function

这些所有代码都会抛出COMPILE-TIME ERROR。

对于第一个示例,将显示错误,说“已在当前块中声明了局部变量'A'。”。

而对于第2和第3个示例,将显示错误“'Public Sub b()'具有多个具有相同签名的定义。”和''公共函数c()As Integer'有多个具有相同签名的定义。“,分别。

从这些错误中,请注意错误是在变量和过程/函数的不同位置抛出的。对于变量,在第二次声明时抛出错误,而对于过程/函数,它在相同代码的第一次声明/定义时抛出。

正如用户在上面某处的评论中所述,VB.NET代码在后台持续检查和/或纠正;您可以在VS IDE的“错误列表”窗口中看到此错误。由于这是一个错误而不是警告,因此在解决错误之前代码将无法编译。


21
投票

这里的部分问题是您需要将语言与IDE体验区分开来。

作为一种语言,VB.NET在标识符方面肯定不区分大小写。调用DateTime.Parsedatetime.parse将绑定到完全相同的代码。与C#之类的语言不同,不可能定义仅根据大小写不同的方法或类型。

作为一个IDE,当VB.NET很好地列出一段代码时,它会尝试保留现有标识符的大小写。当你离开当前的逻辑代码行时,会出现漂亮的列表。在这种情况下,你离开SS的第二个声明,漂亮的lister通知有一个具有该名称的现有标识符并将其更正为具有匹配的大小写。

但是,此行为纯粹是作为用户值添加完成的。它不是核心语言的一部分。


16
投票

VB大部分不区分大小写,但也有例外。例如,XML文字和理解区分大小写。字符串比较通常区分大小写,与T-SQL不同,但是有编译器切换使字符串比较不区分大小写。当然,在处理继承,COM和动态语言运行时时也存在边缘情况。


9
投票

是的,VB.NET编译器以不区分大小写的方式处理标识符。是的,当它使用用另一种语言编写的程序集或使用COM组件时会导致问题。前一种情况由Common Language Specification涵盖。相关规则是:

要使两个标识符被视为不同,它们必须不同于它们的情况。

COM案例由类型库构建器粗略地处理,它强制具有相同名称的标识符的大小相同。即使这些标识符具有不同的角色。换句话说,名为“index”的方法参数将强制将方法名称“Index”重新设置为“index”。正如你可能想象的那样,这产生了相当多的头痛


6
投票

VB是大小写保留(在IDE中)但不区分大小写。它在某种程度上就像Windows文件系统。 Hello.txt和hello.txt被认为是相同的文件名。

IDE假定声明变量是该变量的“正确”大小写,并调整该变量的每个实例与声明匹配。它出于眼睛糖果和一致性的原因,但不是功能性。

我已经看到几个实例,其中案例没有自动更改以匹配声明,并且语句的工作方式相同。您还可以使用任何文本编辑器编写在不同情况下编译得很好的代码。

附注:

大多数人都以不区分大小写的方式思考。当我们看到“狗”这个词时,这个词在我们的脑海中被翻译成意义。这个词的意思不是基于案例(即不管它是否“DOG”,“DoG”或“dOG”仍然吠叫。)计算机将单词视为不连续的位。大写和小写是不同的位模式,因此是不同的。

由于大多数程序员都是人,因此案例不敏感似乎更适应人们的思维方式,而案例敏感性更多地是关于人类如何思考机器的约束。


5
投票

这是您正在使用的编辑器的一部分,它们可能表现不同,但事实是Visual Basic确实是不区分大小写的语言。所以,ssSS是一样的。

Please have a look at VB.NET Basics tutorial for more information :)


3
投票

我不确定我理解你吗? VB不区分大小写,因此ss和SS是相同的变量,因此编译器会正确地抱怨您重新声明了变量。

我认为变量不区分大小写,但函数名称是。


1
投票

是的,VB不区分大小写。它有时会抛弃那些不习惯它的人。


1
投票

人们不必在VB.NET中尝试所有那些难以创建具有标识符的不同大写/小写“拼写”的代码。在不使用“重命名”功能的情况下更改其声明文件中的标识符的大小写将不会导致在其他文件中更新名称,但编辑包含该名称的任何行将使其符合当前定义。

通过这种方式,可以确定VB.NET大部分不区分大小写,但它确实使CLR可以使用标识符的情况,这些标识符可能以区分大小写的方式使用该信息。

© www.soinside.com 2019 - 2024. All rights reserved.