Zusammenfassung
Hier ist die kurze Antwort:
- Typedefs sind eigentlich eine Variable, die durch Kompilierung-Code-Generatoren verwendet.
- C# wurde entwickelt, um das Hinzufügen von Codegenerierungssprachenkonstrukten zu vermeiden.
Daher passt das Konzept von typedefs nicht gut mit der C# -Sprache.
Lange Antwort
In C++, macht es mehr Sinn: C++ als Precompilers begann, die C-Code ausspucken, die dann kompiliert wurde. Dieser "Code-Generator" -Anfang hat immer noch Auswirkungen auf moderne C++ - Funktionen (d. H. Vorlagen sind im Wesentlichen eine Turing-vollständige Sprache zum Erzeugen von Klassen und Funktionen zur Kompilierungszeit). In diesem Kontext ist ein typedef sinnvoll, weil es eine Möglichkeit ist, das "Ergebnis" einer Kompilierzeit-Typfactory oder eines "Algorithmus" zu erhalten, der einen Typ "zurückgibt".
In dieser seltsamen Meta-Sprache (die wenige außerhalb von Boost beherrschen), ist ein typedef eigentlich eine Variable.
Was Sie beschreiben, ist weniger komplex, aber Sie versuchen immer noch, das Typedef als Variable zu verwenden. In diesem Fall wird es als Eingabevariable verwendet. Wenn also anderer Code typedef verwendet, wird dieser Typ nicht direkt verwendet. Es agiert vielmehr als Kompilierzeit-Codegenerator, der Klassen und Methoden basierend auf typdefinierten Eingabevariablen erstellt. Selbst wenn Sie C++ - Vorlagen ignorieren und sich nur C-Typdefinitionen ansehen, ist der Effekt derselbe.
C++ und generatives Programmieren
C++ entwickelt wurde eine Multi-Paradign Sprache (OO und verfahrenstechnischen, aber nicht funktionsfähig, bis Boost-herauskam). Interessanterweise haben Vorlagen ein unerwartetes Paradigma entwickelt: generative Programmierung. (Generative Programmierung war vor C++, aber C++ machte es populär). Generative Programme sind eigentlich Meta-Programme, die - wenn sie kompiliert werden - die benötigten Klassen und Methoden generieren, die wiederum zu ausführbaren Dateien kompiliert werden.
C# und Generative Programmierung
Unsere Werkzeuge entwickeln sich langsam in die gleiche Richtung. Natürlich kann die Reflexion emittiert werden für "manuelle" generative Programmierung, aber es ist ziemlich schmerzhaft. Die Art und Weise, wie LINQ-Anbieter Expressionsbäume verwenden, ist sehr generativer Natur. T4-Vorlagen werden sehr nah, aber immer noch knapp. Der "Compiler als Dienst", der hoffentlich Teil von C# vNext sein wird, erscheint am vielversprechendsten, wenn er mit einer Art von Typvariablen (wie typedef) kombiniert werden könnte.
Dieses Stück des Puzzles ist still missing: generative Programme eine Art von automatischem Auslösemechanismus benötigen (in C++, dies durch implizite template Instanziierung gehandhabt wird).
Es ist jedoch ausdrücklich nicht ein Ziel von C#, jede Art von „Code-Generator“ zu haben, in der C# Sprache wie C++ Vorlagen (wahrscheinlich aus Gründen der Verständlichkeit, sehr wenige C++ Programmierer verstehen C++ Vorlagen). Dies wird wahrscheinlich eine Nische sein, die von T4 und nicht von C# befriedigt wird.
Schlussfolgerung (Wiederholung der Zusammenfassung)
Alle der oben genannten ist folgendes zu sagen:
- Typedefs sind eine Variable von Codegeneratoren verwendet.
- C# wurde entwickelt, um das Hinzufügen von Codegenerierungssprachenkonstrukten zu vermeiden.
Daher passt das Konzept von typedefs nicht gut mit der C# -Sprache.
Warum können Sie nicht von integrierten Typen ableiten? – arootbeer
Ich bin nur neugierig? Was wäre eine Situation oder ein Grund, warum jemand das tun möchte? Tut mir leid, wenn das komisch klingt, ich weiß nur nicht warum du Int nicht benutzen willst. Es klingt, als wäre es für einen anderen Entwickler verwirrend, Ihren Code zu lesen. –
Zustimmen, interessiert, dies zu lesen, aber es muss schlechte Praxis sein –