Quello che mi è successo stamattina mi ha incoraggiato ad iniziare una nuova "rubrica" nel mio weblog, dedicata a tutte quelle cose che, a meno che non ci si legga il manuale fino all'ultima virgola (come peraltro bisognerebbe fare), si arriverà a conoscere per pura coincidenza.

Il primo post riguarda l'uso del carattere chiocciola in C#. Tutti sapranno che quando si scrivono delle stringhe in C#, anteporre la chiocciola consente di adottare una diversa politica di escape.

Così mentre questo non è consentito:

string a = "d:\myfolder";

Con l'uso della chiocciola diventa possibile:

string a = @"d:\myfolder";

Fin qui nulla di nuovo, senonché stamattina stavo facendo qualche test con il DOM del MsHTML control e mi sono imbattuto in un uso curioso ma utilissimo della chiocciola che sinceramente non mi era mai capitato di incontrare.

Digitando la seguente stringa:

int key = this.DOM.parentWindow.event.keyCode;

Mi sono trovato automaticamente una cosa del genere:

int key = this.DOM.parentWindow.@event.keyCode;

Di primo acchito ho creduto di aver digitato male, non sono esattamente un dattilografo, alla tastiera. Ma rimuovendo la chiocciola evidentemente la parola chiave "event" è stata sottolineata evidenziando l'errore. Personalmente sono abituato a evitare come il male l'uso delle parole chiave nella nomenclatura del mio codice, ma riconosco che, accedendo ad esempio al DOM dell'HTML che è fatto per il Javascript sarebbe impossibile farlo senza questa scappatoia.

Naturalmente non pago ho fatto un po' di prove:

myObject.@public
myObject.@fixed
myObject.@protected
...

Consiglio: non chiamate mai public, fixed o protected un membro di una vostra classe. Non occorre dirlo, ma magari è utile ricordarlo.

Curiosità nella curiosità, il Syntax Highlighter di SharpDeveloper non riconosce la chiocciola come carattere di escape valido. Infatti, mentre VS.NET indica le keyword in nero quando viene preposta la chiocciola, per l'IDE di SharpDeveloper (che come molti sapranno è il fulcro del Code Snipped Editor di IMHO), la lascia in blu. Sarebbe interessante sapere se si tratta di una dimenticanza oppure se anche agli sviluppatori di questo ambiente di sviluppo sia sfuggita questa utile feature.

Sono ovviamente andato a vedermi l'SDK, ma non sono riuscito a trovare alcun riferimento a questo uso della chiocciola. Appena ho un attimo approfondirò le specifiche di C#, a meno che non ci sia già qualcuno che mi segnala dove trovare questo argomento.

powered by IMHO 1.1