Visual Basic .NET è case-insensitive, mentre C# fa differenza tra maiuscole e minuscole. C'è un caso in cui questo comportamento può causare problemi. La seguente classe C# compila correttamente:
1 public class TestClass
2 {
3 public void Foo(string str)
4 {
5 MessageBox.Show("Richiamata Foo con parametro " + str);
6 }
7
8 public void foo(string str)
9 {
10 MessageBox.Show("Richiamata foo con parametro " + str);
11 }
12
13 public void TestMethod(string str)
14 {
15 MessageBox.Show("Richiamata Test con parametro " + str);
16 }
17 }
Per il compilatore C#, infatti, i metodi Foo (linea 3) e foo (linea 8) sono differenti. Ma cosa succede se questa classe fa parte di una libreria il cui riferimento viene aggiunto ad un progetto Visual Basic? Per quest'ultimo Foo e foo sono la stessa cosa. In una situazione del genere, l'InstelliSense dell'editor di VB semplicemente non mostra Foo e foo tra l'elenco dei membri della classe. Se, nonostante questo, si prova a richiamare Foo (oppure foo) da VB, si ottiene il seguente messaggio in fase di compilazione:
'Foo' is ambiguous because multiple kinds of members with this name exist in class 'ClassLibrary1.TestClass'
Come fatto notare da Marco De Sanctis, un assembly che espone identificatori di questo tipo non è CLS compliant (maggiori informazioni sull'argomento sono disponibili qui).