Sono molto entusiasta delle funzionalità dinamiche in C# (C#4 dynamic keyword - why not?), soprattutto perché in certe parti della libreria del mio codice uso molta riflessione.La parola chiave "dinamica" C# 4.0 rende ridondante la Generics?
La mia domanda è duplice:
1. significa "dinamico" sostituire Generics, come nel caso qui di seguito? Metodo
Generics:
public static void Do_Something_If_Object_Not_Null<SomeType>(SomeType ObjToTest) {
//test object is not null, regardless of its Type
if (!EqualityComparer<SomeType>.Default.Equals(ObjToTest, default(SomeType))) {
//do something
}
}
metodo dinamico (??):
public static void Do_Something_If_Object_Not_Null(dynamic ObjToTest) {
//test object is not null, regardless of its Type?? but how?
if (ObjToTest != null) {
//do something
}
}
2. fa "dinamico" ora consentire metodi per restituire tipi anonimi, come nel caso di seguito ?:
public static List<dynamic> ReturnAnonymousType() {
return MyDataContext.SomeEntities.Entity.Select(e => e.Property1, e.Property2).ToList();
}
fresco, evviva
EDIT:
aver pensato attraverso la mia domanda un po 'di più, e alla luce delle risposte, vedo ho completamente incasinato la principale domanda generica/dinamico. Sono davvero completamente diversi. Quindi sì, grazie per tutte le informazioni.
E il punto 2?
Un altro uso sorprendentemente utile per le dinamiche: JSON interviene in situazioni di web RESTful, in particolare se il JSON in questione varia pesantemente da chiamata a chiamata. Ci sono librerie che serializzeranno e deserializzeranno JSON su/da un oggetto dinamico. – Randolpho