Creazione di un oggetto senza conoscere il nome della classe in fase di progettazione

StackOverflow https://stackoverflow.com/questions/53649

  •  09-06-2019
  •  | 
  •  

Domanda

Usando la riflessione, devo indagare su una DLL utente e creare un oggetto di una classe al suo interno.

Qual è il modo più semplice per farlo?

È stato utile?

Soluzione

Altri suggerimenti

System.Reflection.Assembly è la classe che vorrai utilizzare.Contiene molti metodi per eseguire l'iterazione sui tipi contenuti in una DLL utente.Puoi scorrere ciascuna classe, magari vedere se eredita da una particolare interfaccia, ecc.

http://msdn.microsoft.com/en-us/library/system.reflection.assembly_members.aspx

Investigare Assembly.GetTypes() metodo per ottenere l'elenco dei tipi, o Assembly.GetExportedTypes() solo per quelli pubblici.

Puoi creare un'istanza di una classe da un oggetto Type utilizzando Activator.CreateInstance, per ottenere tutti i tipi in una DLL puoi utilizzare Assembly.GetTypes

Dai un'occhiata a questi link:

http://www.java2s.com/Code/CSharp/Development-Class/Createanobjectusingreflection.htm

http://msdn.microsoft.com/en-us/library/k3a58006.aspx

Fondamentalmente usi la riflessione per caricare un assembly, quindi trovi un tipo che ti interessa.Una volta ottenuto il tipo, puoi chiedere di trovare i suoi costruttori o altri metodi/proprietà.Una volta ottenuto il costruttore, puoi invocarlo.Facile!

Come già detto, è necessario inserire il namespace System.Reflection.

Se conosci in anticipo la posizione/nome della DLL che desideri caricare, devi scorrere Assembly.GetTypes().

In Pseudocodice sarebbe simile a questo:

Creare e assemblare un oggetto.

Scorrere tutti i tipi contenuti nell'assembly.

Una volta trovato quello che stai cercando, invocalo (CreateInstance)…

Usalo saggiamente.

;)

Ho un sacco di codice Reflection se vuoi dare un'occhiata in giro, ma il compito è davvero semplice e ci sono almeno una dozzina di articoli con esempi in giro.(Alias ​​Google).Nonostante ciò, MSDN è tuo amico per Reflection Reference.

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