Sommario
Ecco la risposta breve:
- typedef sono in realtà una variabile utilizzata dai generatori di codice in fase di compilazione.
- C# è stato progettato per evitare l'aggiunta di costrutti del linguaggio di generazione del codice.
Pertanto, il concetto di typedef non si adatta bene al linguaggio C#.
risposta Lunghi
In C++, ha più senso: C++ iniziato come un pre-compilatore che sputare codice C, che è stato poi compilato. Questo principio di "generatore di codice" ha ancora effetti nelle moderne caratteristiche del C++ (cioè i template sono essenzialmente un linguaggio completo di Turing per generare classi e funzioni in fase di compilazione). In questo contesto, un typedef ha senso perché è un modo per ottenere il "risultato" di una fabbrica di tipo in fase di compilazione o "algoritmo" che "restituisce" un tipo.
In questo strano meta-linguaggio (che pochi al di fuori di Boost hanno imparato), un typedef è in realtà una variabile.
Quello che stai descrivendo è meno complesso, ma stai ancora cercando di usare il typedef come variabile. In questo caso, viene utilizzato come variabile di input. Quindi, quando un altro codice usa typedef, non usa realmente quel tipo direttamente. Piuttosto, agisce come un generatore di codice in fase di compilazione, costruendo classi e metodi basati su variabili di input tipizzate. Anche se si ignorano i modelli C++ e si guardano solo i typedef, l'effetto è lo stesso.
C++ e generativa Programmazione
C++ è stato progettato per essere un linguaggio multi-paradign (OO e procedurale, ma non funzionale fino Boost è uscito). È interessante notare che i modelli hanno evoluto un paradigma inaspettato: la programmazione generativa. (La programmazione generativa era prima del C++, ma il C++ lo rendeva popolare). I programmi generativi sono in realtà meta-programmi che, una volta compilati, generano le classi e i metodi necessari, che sono a loro volta compilati in file eseguibili.
C# e generativa Programmazione
I nostri strumenti sono lentamente evolvendo nella stessa direzione. Naturalmente, la riflessione emessa può essere utilizzata per la programmazione generativa "manuale", ma è piuttosto dolorosa. Il modo in cui i provider LINQ usano gli alberi di espressione è di natura molto generativa. I modelli T4 si avvicinano molto ma non riescono ancora. Il "compilatore come servizio" che si spera faccia parte di C# vNext sembra molto promettente, se potesse essere combinato con un tipo di variabile di tipo (come un typedef).
Questo pezzo del puzzle è still missing: programmi generativi hanno bisogno di un qualche tipo di meccanismo automatico di riferimento (in C++, questo viene gestito da implicito modello di istanza).
Tuttavia, non è esplicitamente non un obiettivo di C# per avere qualsiasi tipo di "generatore di codice" nel linguaggio C# come i template C++ (probabilmente per il bene della comprensibilità; pochissimi programmatori C++ capiscono C modelli ++). Questa sarà probabilmente una nicchia soddisfatta da T4 piuttosto che da C#.
Conclusione (ripetendo la sintesi)
Tutto quanto sopra è dire questo:
- typedef sono una variabile utilizzata dai generatori di codice.
- C# è stato progettato per evitare l'aggiunta di costrutti del linguaggio di generazione del codice.
Pertanto, il concetto di typedef non si adatta bene al linguaggio C#.
Perché non è possibile derivare dai tipi predefiniti? – arootbeer
Sono solo curioso? Quale sarebbe una situazione o una ragione qualcuno vorrebbe fare questo? Scusa se questo suona strano, sono solo ignorante sul motivo per cui non vorrai usare int. Sembra che sarebbe confuso per un altro sviluppatore leggere il tuo codice. –
D'accordo, interessato a leggere questo, ma deve essere una cattiva pratica –