
Contents
extern alias – Quando vuoi 2 tipi == ma !=
Il dramma di nomenclatura
Ah, extern alias. Questa non è una funzionalità per tutti. È per gli sviluppatori che hanno ereditato un progetto con due DLL di terze parti (chiamiamole “LibraA” e “LibraB”) che, per un sadico scherzo del destino, contengono entrambe una classe chiamata SuperMegaDataProcessor.
“Perché non rinominarle?” chiederete voi, con l’ingenuità di un programmatore appena uscito dall’università. La risposta è: “Non si può!”. Magari sono librerie proprietarie, o siete bloccati in un inferno di compatibilità.
È qui che entra in gioco l’alias esterno. Non risolve il vostro problema di vita, ma almeno rende il compilatore un po’ meno schizofrenico. È come quando in una classe ci sono due ragazzi con lo stesso nome: non li chiami “Marco” e “Marco”, ma “Marco del Sud” e “Marco del Nord”. O, se sei su C#, “LibraA::SuperMegaDataProcessor” e “LibraB::SuperMegaDataProcessor”.
Citazione di Attualità (Musicale)
“Two roads diverged in a wood, and I—I took the one less traveled by, And that has made all the difference.” – Robert Frost (The Road Not Taken).
E in C# diciamo: “Due librerie con lo stesso nome si sono incrociate nel nostro progetto e abbiamo dovuto usare
extern alias, e questo ha reso il nostro codice uno scherzo difficile da spiegare ai junior.”
Lo scontro dei Titani
Per usarlo, dovete prima dirlo al compilatore (spesso modificando il file .csproj o tramite le impostazioni dell’IDE, impostando un alias come LibraA sulla referenza della DLL):
C#
// 1. Dichiara che userai un alias esterno
extern alias LibraA;
extern alias LibraB;
// 2. Usali con l'operatore '::'
public void ProcessTwoWorlds()
{
// Usa il SuperMegaDataProcessor dalla LibraA
LibraA::MyCompany.SuperMegaDataProcessor processorA = new();
processorA.Process();
// Usa il SuperMegaDataProcessor dalla LibraB
LibraB::MyCompany.SuperMegaDataProcessor processorB = new();
processorB.Process();
// Senza alias, questo codice sarebbe un campo di battaglia.
}
L’unico modo per distinguere due gemelli identici. Utile? Sì. Elegante? Assolutamente no. Ma hey, a volte la programmazione è solo patchare le decisioni sbagliate del passato, come mettere una toppa su una maglia autografata da Michael Jordan.
