Dai miei post precedenti avrete sicuramente capito che NON sono un accanito sostenitore della maggiore bontà di una sintassi a discapito di un’altra. Alla fine diventa tutto MSIL e quindi la forma tecnica scelta per lo sviluppo del proprio codice dipende esclusivamente dal linguaggio che ci è maggiormente familiare.

Ciò detto non si può nemmeno negare che esistano delle differenze che rendono più o meno facile, efficente e leggibile il codice (ovviamente secondo i punti di vista).

Uno dei fattori che NON mi piacciono relativamente alla sintassi C# è la distinzione tra maiuscole e minuscole. Questa impostazione rende piuttosto difficile, per esempio, la distinzione tra una variabile oggetto ed il tipo di oggetto che l’ha generata. Guardate l’esempio seguente:

C#
foreach (DateTime date in _Months.Keys)

Questo esempio istanzia un ciclo da eseguirsi per ogni oggetto di tipo Datetime contenuto in una collezione. La sintassi è valida e perfettamente lecita ma per uno sviluppatore VB può creare confusione dato che “date” rappresenta l’indicazione di un tipo dati.
Per questo motivo lo sviluppatore che cerca di tradurre con :

VB
For Each Date As DateTime In _Months.Keys

riceverebbe un errore in quanto Date rappresenta un tipo dati e non un’istanza di variabile oggetto. Dovremmo quindi modificare il codice con:

VB
For Each objDate As DateTime In _Months.Keys

che è corretto.

Esistono però dei casi in cui C# è più agile di VB. Dovendo, ad esempio, gestire all’interno del codice un evento per effettuare un’operazione non molto complessa possiamo creare in C# un delegato di funzione molto rapidamente mentre in VB dovremo scrivere qualche riga di codice in più. Nell’esempio che segue vediamo come gestire un evento scatenato da Object azzerando il contenuto di una variabile:

C#
Object.Saved += delegate { mystring = null; };

VB

AddHandler Object.Saved, AddressOf ObjectSavedHandler
Private Shared Sub ObjectSavedHandler(ByVal sender As Object, ByVal e As SavedEventArgs)
 mystring = String.Empty
End Sub