簡體   English   中英

VB.NET不區分大小寫; 區分大小寫?

[英]VB.NET not case sensitive; well sort of case-sensitive?

C#沒關系:

private int total;
public int Total {
    get {
        return total;
    }
}

因此,后備字段total的拼寫與Property Total拼寫相同,唯一的區別是T的情況。

如果我嘗試執行以下操作,則使用VB.NET VS會抱怨。 實際上,它甚至都不會讓我用小寫的t寫出Return total並自動將大寫的T改正為

在此處輸入圖片說明

但是,如果我對后備字段的拼寫不同,那么似乎沒問題:

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

我意識到它們是不同的語言,但是這種差異背后是否存在邏輯原因? EDIT最初說的是“表觀不一致”,而不是“差異”)

另外-我假設即使Visual Studio自動更正了VB.NET的大小寫,但實際上這種語言不區分大小寫?

我意識到它們是不同的語言,但是這種明顯的不一致背后有邏輯上的原因嗎?

最初的原因僅是歷史原因:VB基於BASIC,與當時的其他語言(FORTRAN)一樣,它不區分大小寫(但通常是全大寫)。

此外,我沒有看到任何不一致的地方:在VB中,大小寫是完全一致的。 特別是,它並不像標題所要求的那樣“區分大小寫”。

即使在今天,也有理由不區分大小寫,這合乎邏輯的原因:由於名稱沖突,這使得引入錯誤更加困難; 考慮以下C#代碼:

private int total;

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

您立即發現錯誤了嗎? 如果是這樣,還不錯(這里的語法高亮有幫助)。 在VB中,不會發生此類錯誤。 但是實際上,我認為這類bug並不是所有問題,因為一旦發現它們就很容易消除。 因此,盡管這是不區分大小寫的原因,但並不是一個很強的理由。

最后,請注意Windows和OS X文件系統在這里使用與VB相同的約定:文件系統不區分大小寫(文件名不區分大小寫),但區分大小寫 –意味着文件系統保留文件名的原始大小寫並顯示它正確,但比較時不考慮大小寫。

VB.NET不區分大小寫,對於Visual Basic程序員來說,它易於學習,並且與Visual Basic具有相同的特征。

C#區分大小寫,它與VB.NET語言不同。 即使它們都用於.NET開發, 也不必保持一致 您可以使用多種語言進行.NET開發,並且這些語言之間的差異很多,並且不僅限於區分大小寫。

有幾點要解決:

  • 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會自動將屬性內的“總計”校正為“總計”,因為您實際上是在引用屬性,而不是字段。 因此,編譯器不會向您顯示錯誤,但是,如果要刪除該字段(以便您的程序進行編譯),則在運行時會遇到堆棧溢出,因為該屬性會自行調用。 請注意,即使您設法打開了IDE的自動更正功能,您仍然會引用該屬性,因為它是不區分大小寫地查找的。

到目前為止,VB.Net編譯器不區分大小寫,因此出於所有意圖和目的,它禁止使用具有相同名稱的字段,並且只區分大小寫字母。

底層的CLI(公共語言界面)和CLR(公共語言運行時)確實支持區分大小寫。 但是,給出的c#示例不是CLS有效的。

實際上,這里的問題與名為“ total”的不同case字段無關。 如果刪除該字段,則會看到相同的問題。

問題在於,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原理會使解釋VB代碼中實際發生的事情變得非常令人沮喪。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM