C# e Visual Basic .NET sono due tra i molti linguaggi di programmazione disponibili per la piattaforma .NET. Il Common Language Runtime (CLR) del Framework .NET costituisce, infatti, una piattaforma di esecuzione comune per un gran numero di linguaggi, tra cui C++, J#, Cobol.NET .
Più che stabilire quale sia il "migliore", è interessante capire le peculiarità di ciascun linguaggio. Ci soffermeremo sulla valutazione delle differenze più importanti.
Ad una prima analisi è evidente che VB.NET risulta la scelta preferita per chi proviene dalle versioni precedenti di VB e ASP-VBScript, mentre C# è più accattivante per chi proviene da esperienze con C++ e Java. La sintassi di C# assomiglia moltissimo a quella di Java, mentre quella di VB.NET è evoluzione del Visual Basic.
La differenza più importante nel passaggio dal vecchio al nuovo non riguarda tanto la sintassi quanto la sensazione di novità in termini di approccio alla programmazione ad oggetti.
Chi è abituato a lavorare in C++ o Java trova un ambiente in cui i concetti sono analoghi quando non del tutto sovrapposti. Per esempio in .NET come in Java tutto è un oggetto: è abbandonato ogni tipo di approccio ibrido con la programmazione strutturata in stile C++.
Quindi chi proviene dai "vecchi" ASP e VB si trova davanti ad un linguaggio simile in alcuni aspetti della sintassi di base ma con un approccio alla programmazione a oggetti che è comune a tutto il Framework ed è più proprio di Java e compagnia.
C# è un linguaggio nuovo, mentre VB .NET porta con sé l'eredità di tutte le versioni precedenti di Visual Basic (la sintassi di VB .NET, seppur aggiornata con il supporto agli oggetti, è praticamente la stessa di quella di Visual Basic 4.0, rilasciato nell'ormai lontano 1996).
Un primo aspetto evidente è che il codice scritto in VB .NET risulta più lungo rispetto all'equivalente in C#. Consideriamo, per esempio, una funzione che prende in ingresso due numeri e ne calcola la media:
//C#
public double CalcolaMedia(double N1, double N2)
{
return (N1 + N2) / 2;
}
'Visual Basic .NET
Public Function CalcolaMedia(ByVal N1 As Double, ByVal N2 As Double) As Double
Return (N1 + N2) / 2
End Function
Un'altra grande differenza, forse la più evidente, è che C# è case sensitive, ovvero fa distinzione tra maiuscole e minuscole, mentre VB case insensitive: per C# le variabili nomePersona e NomePersona sono diverse, mentre per Visual Basic .NET sono la stessa.
Al di là delle differenze che riguardano la sintassi, C# permette di realizzare cose che in VB .NET non si possono fare, e viceversa. Ad esempio, C#, mostrando la sua derivazione dal C++, consente di utilizzare i puntatori, cosa che VB .NET non permette.
Alcune differenze architetturali sono state colmate con la versione 2.0 del Framework, che introduce anche per Visual Basic .NET l'overloading degli operatori (altra caratteristica che C# ha preso da C++) e la possibilità di documentare il codice scritto utilizzando il linguaggio XML. Infatti C# permette la documentazione delle classi usando dei tag nel codice in modo molto somigliante ai commenti per JavaDocs.
VB .NET, in particolare con la nuova versione del Framework, rende ancora più semplice e veloce la scrittura di applicazioni: tra i tanti esempi che si potrebbero fare a riguardo, citiamo il namespace My , che fornisce un rapido accesso a tutta una serie di proprietà e metodi di uso comune, consentendo uno sviluppo più efficiente.
Le informazioni contenute nel namespace My sono comunque disponibili anche da C#, ma la sua presenza in VB .NET rende molto più agevole lo svolgimento di alcuni compiti. Ad esempio, per scaricare un file da Internet, usando Visual Basic .NET con il Framework 2.0 è sufficiente un'istruzione:
My.Computer.Network.DownloadFile("https://www.html.it/file.zip",
"C:/Test")
In C# non esiste un oggetto My e dovremmo istanziare noi un oggetto della classe Network per ottenere lo stesso effetto.
Inoltre, l'elenco dei membri che appare grazie all'IntelliSense in VB .NET è diviso in due schede in cui vengono messi in evidenza gli elementi di uso comune, facilitando la selezione della voce desiderata. In C# l'elenco dei membri viene sempre visualizzato nella sua interezza.
Questa rapida carrellata sulle differenze tra C# e Visual Basic .NET non ha la pretesa di essere esaustiva: per maggiori informazioni (riguardanti soprattutto le più evidenti diversità di sintassi), consultare i collegamenti a fine pagina. Inoltre, disponendo di Visual Studio 2005, è possibile ottenere maggiori dettagli sull'argomento cercando Language Equivalents nella guida in linea.