Around and About .NET World

Il blog di Marco Minerva
posts - 1671, comments - 2232, trackbacks - 2135

My Links

News

Contattami su Live Messenger:


MCTS: Windows, Web, Distributed Applications & SQL Server

MCPD: Enterprise Applications

Tag Cloud

Archives

Post Categories

Links

Visual Basic .NET e i metodi case-sensitive del C#

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).

Technorati Tags: , , ,


 

Print | posted on Sunday, March 4, 2007 12:00 PM | Filed Under [ C# VB .NET ]

Feedback

Gravatar

# re: Visual Basic .NET e i metodi case-sensitive del C#

Infatti un assembly che espone identificatori di questo tipo non è CLS compliant
http://msdn2.microsoft.com/en-us/library/12a7a7h3.aspx
3/4/2007 12:07 PM | Marco De Sanctis
Gravatar

# re: Visual Basic .NET e i metodi case-sensitive del C#

Grazie per la segnalazione! Ho aggiunto il tuo commento al post originale, mi sembra che sia una nota importante!
3/4/2007 12:14 PM | Marco Minerva
Gravatar

# re: Visual Basic .NET e i metodi case-sensitive del C#

Giusto! Tra l'altro, una cosa di cui mi raccomando sempre, le regole di stile in c# prevedono che i membri pubblici siano Maiuscoli, lasciando il minuscolo ai membri o variabili private. Per i parametri di un metodo invecie io preferisco usare minuscolo anche se il metodo è pubblico.
3/4/2007 12:58 PM | http://blogs.ugidotnet.org/allep
Gravatar

# re: Visual Basic .NET e i metodi case-sensitive del C#

In ogni caso da VB.NET puoi sempre richiamare il metodo che preferisci con:

Dim Obj as TestClass
Obj.GetType.GetMethod("foo", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.Public).Invoke(Obj, New Object() {})
3/5/2007 10:35 AM | Michele Bernardi
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET