Ich bin sehr gespannt auf die dynamischen Funktionen in C # ( dynamisches Keyword C # 4 - warum? nicht? ), vor allem, weil ich in bestimmten Teilen der Bibliothek meines Codes viel Reflexion verwende.
Meine Frage ist zweifach:
1. ersetzt "dynamic" Generics wie im folgenden Fall?
Generics-Methode:
%Vor%dynamische Methode (??):
%Vor%2. erlaubt "dynamic" nun Methoden, anonyme Typen zurückzugeben, wie im folgenden Fall?:
%Vor%cool, Prost
BEARBEITEN:
Nachdem ich meine Frage ein wenig genauer durchdacht habe, und angesichts der Antworten, sehe ich, dass ich die generische / dynamische Hauptfrage völlig durcheinander gebracht habe. Sie sind in der Tat völlig anders. Also ja, danke für alle Infos.
Was ist aber mit Punkt 2?
dynamic
kann eine begrenzte Anzahl von Reflexionsszenarien vereinfachen (wo Sie den Mitgliedsnamen im Voraus kennen, aber es gibt keine Schnittstelle) - insbesondere könnte es bei generischen Operatoren helfen ( obwohl andere Antworten vorhanden sind ) - aber abgesehen von den generischen Operatoren gibt es wenig Überschneidungen mit Generika.
Mit Generics können Sie (zur Kompilierzeit) wissen, mit welchem Typ Sie arbeiten - umgekehrt interessiert sich dynamic
nicht für den Typ .
Insbesondere - Generika ermöglichen Ihnen, eine Reihe von Bedingungen über für einen Typ anzugeben und zu beweisen - d. H., Es kann eine Schnittstelle implementieren oder einen öffentlichen parameterlosen Konstruktor haben. dynamic
hilft auch nicht mit: es unterstützt keine Schnittstellen, und schlimmer als einfach keine Schnittstellen zu haben, bedeutet das, dass wir explizite Schnittstellenimplementierungen mit dynamic
nicht sehen können .
Außerdem ist dynamic
wirklich ein Spezialfall von object
, also kommt das Boxen ins Spiel, aber mit einer Rache.
In Wirklichkeit sollten Sie Ihre Verwendung von dynamic
auf einige wenige Fälle beschränken:
Für alle anderen Fälle sind Generika und normale C # der richtige Weg.
Um Ihre Frage zu beantworten. Nein.
List<T>
und kann sie dann für die Liste der Strings, Ints usw. verwenden. Was das Schlüsselwort dynamic
Ihnen geben würde, ist
Um Ihre erste Frage zu beantworten, werden Generika zur Kompilierzeit, dynamische Typen zur Laufzeit aufgelöst. Es gibt also einen deutlichen Unterschied in der Typsicherheit und der Geschwindigkeit.
Dynamische Klassen und Generika sind völlig unterschiedliche Konzepte. Mit Generics definieren Sie Typen zur Kompilierzeit. Sie ändern sich nicht, sie sind nicht dynamisch. Sie fügen einfach einen "Platzhalter" zu einer Klasse oder Methode hinzu, damit der aufrufende Code den Typ definiert.
Dynamische Methoden werden zur Laufzeit definiert. Sie haben dort keine Typsicherheit für die Kompilierungszeit. Die dynamische Klasse ist ähnlich, als ob Sie Objektreferenzen und Aufrufmethoden durch ihre String-Namen mit Reflektion haben.
Beantworten Sie die zweite Frage: Sie können anonyme Typen in C # 3.0 zurückgeben. Übergeben Sie den Typ an das Objekt, geben Sie es zurück und verwenden Sie die Reflektion, um auf die Mitglieder zuzugreifen. Das dynamische Schlüsselwort ist nur syntaktischer Zucker dafür.
Tags und Links .net c# reflection generics dynamic