C # gruppo di carico e l'associazione tardiva
-
22-08-2019 - |
Domanda
questo libro su C # e .NET e io sono imparare un sacco di cose interessanti. Ho letto la parte in cui l'autore parla di caricare dinamicamente un montaggio e la creazione di un'istanza di un tipo in quell'assemblea.
In AS3, è possibile fare lo stesso genere di cose, tranne una cosa: si può chiedere al compilatore di non compilare una serie di classe, ma per verificare la sicurezza di tipo. Ecco un esempio:
//Defined in an external library
public class A {...}
//In my application, I tell the compiler to type check A, but not compile it
var a:A = new A();
a.whatever();
In fase di esecuzione nel mio codice di applicazione, posso caricare dinamicamente la mia libreria esterna che contiene la definizione di classe A, caricare queste definizioni in ApplicationDomain della mia applicazione e tutto verrà eseguito bene. Non ci sono esigenze di riflessione!
Questo è possibile in C #?
In altre parole, posso istruire il compilatore C # per TYPECHECK contro un gruppo di classe (diciamo, in una libreria), ma escluderli dalla compilation?
Soluzione
Ho appena leggere questo
Action Script è un linguaggio dinamico, offre come un "bonus speciale" una caratteristica di tipo di controllo, aiuta a catturare gli insetti in fase di compilazione, proprio come lingue tipizzati statici fanno.
C # è un linguaggio statico-typed, lo fa tutto il suo tipo di controllo in fase di compilazione. Il controllo di tipo non è un "valore aggiunto" si tratta di una caratteristica integrale. C # ha sempre avuto la capacità di fine-bind utilizzando la riflessione e la funzione è sempre meglio con il nuovo imminente parola chiave dynamic.
Tuttavia, se si utilizza una qualsiasi delle caratteristiche tardo-vincolante che C # ha, si ottiene alcun tipo di controllo.
Altri suggerimenti
Io non sono al 100% chiaro su ciò che il codice AS3 sta facendo - ma sembra che si vuole definire un'interfaccia comune (in una DLL separata) che il montaggio esterno può implementare - e semplicemente lanciare quando si crea il oggetto:
Type type = loadedAssembly.GetType(fullyQualifiedName);
IMyInterface obj = (IMyInterface)Activator.CreateInstance(type):
ora è possibile utilizzare metodi definiti su obj
facilmente.
In alternativa, in C # 4.0 la parola dynamic
fornisce anatra-digitazione.