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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top