2012-12-13 337 views
0

這是確定在C#VB.NET不區分大小寫;很好的區分大小寫?

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

所以支持字段total拼寫一樣PropertyTotal與唯一告訴他們除了作爲T的情況。

隨着VB.NET VS抱怨,如果我試圖做到以下幾點。事實上,它甚至不會讓我寫Return total以小寫t,並自動校正成一個大寫T

enter image description here

但是,如果我拼寫支持字段不同則似乎是確定:

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

我意識到他們是不同的語言,但這背後有一個合乎邏輯的理由嗎? (編輯最初說「明顯不一致」而不是「差異」)

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

+0

看看這個http://stackoverflow.com/questions/2300983/is-vb-really-case-insensitive – V4Vendetta

+1

實際上,VB.Net將編譯爲CLR,而CLR區分大小寫,但VS IDE在bg中編譯並將「自動轉換」成爲相同的情況。 http://stackoverflow.com/questions/2300983/is-vb-really-case-insensitive –

+0

「實際上」C#和VB.NET編譯爲相同的代碼。順便說一句,如果編譯器會允許你的第一個片段,你會產生**無限循環**。爲了防止你這樣做,它不允許它在VB中(也因爲VB.NET開發人員期望VB不區分大小寫)。 –

回答

4

我意識到他們是不同的語言,但是在這種明顯的不一致性背後有邏輯原因嗎?

最初的原因很簡單:VB基於BASIC,與當時其他語言(FORTRAN)不區分大小寫(但通常用大寫字母寫)。此外,我沒有看到任何不一致:在VB內部,套管是完全一致的。特別是,當你的標題要求時,它不是「區分大小寫」。

還有邏輯上的原因是不區分大小寫,即使在今天:由於名稱衝突導致錯誤更難;考慮以下C#代碼:

private int total; 

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

您是否立即發現錯誤?如果是這樣,不壞(這裏的語法突出幫助)。在VB中,這類錯誤不會發生。但在實踐中,我認爲這類錯誤不是所有問題,因爲一旦確定它們很容易被消除。所以雖然這是不區分大小寫的原因,但並不是很強大。

最後,請注意Windows和OS X文件系統使用相同的約定在這裏VB:文件系統不區分大小寫(文件名不區分大小寫),但情況下知道 - 這意味着文件系統會保留原來的外殼的文件名並正確顯示,但比較時,不考慮大小寫。

+0

如果VS將所有VB.NET命令改爲大寫或小寫,一個或另一個,但不是適當的 - 也許我只是一個學生? – whytheq

+1

@whytheq我不明白爲什麼VB應該這樣做。當你寫文本的時候,你可能還會寫適當的情況,適當地在大寫字母和小寫字母之間交替,並且仍然期望其他人能夠閱讀這些內容,對嗎?恰當的拼寫比所有大寫或全部小寫都更易讀。 –

+0

@KonradRudolph .... ok同意(雖然我們可以回到C#並問爲什麼不顯示所有的C#在正確的情況下,如果這使得事情更具可讀性);感謝您的幫助;我想我只需要接受蘋果和梨是不同的。 – whytheq

1

VB.NET不區分大小寫,它被設計爲易於學習Visual Basic程序員,並與Visual Basic共享此特性。

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

+0

+1 ...「不一致」絕對是錯誤的詞 - I已經編輯了OP – whytheq

0

VB.Net編譯器對於所有意圖和目的都是不區分大小寫的,因此它禁止使用具有相同名稱和唯一區別大寫或小寫字母的字段。

底層CLI(公共語言接口)和CLR(公共語言運行庫)支持大小寫差異。但是,給出的c#示例不是CLS有效的。

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的自動更正功能,您仍然會引用該屬性,因爲它的大小寫不敏感。

+0

+1謝謝Rolf;我只需要接受差異並繼續前進 – whytheq

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-主義的可以使它很無奈的解釋什麼是VB代碼真的發生了。