Maison >développement back-end >C++ >Puis-je instancier une classe au moment de l'exécution en connaissant uniquement sa DLL et son nom de type ?

Puis-je instancier une classe au moment de l'exécution en connaissant uniquement sa DLL et son nom de type ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-19 09:21:09491parcourir

Can I Instantiate a Class at Runtime Knowing Only its DLL and Type Name?

Chargement dynamique des assemblys et des classes instanciées au moment de l'exécution

Connaissant uniquement le nom du fichier DLL et le nom de la classe, est-il possible d'instancier un objet au moment de l'exécution sans référencer explicitement l'assembly dans le projet ? Cette classe implémente généralement une interface qui permet la conversion de type après instanciation.

Nom de l'assembly : library.dll Tapez le nom : Company.Project.Classname

Aucun chemin de fichier

Ne peut pas être utilisé car il n'y a pas de chemin absolu pour la DLL. La DLL peut être située à la racine de l'application, dans system32 ou dans le GAC. Assembly.LoadFile

Solution

C'est possible. Utilisez

pour charger un assembly en mémoire. Ensuite, utilisez Assembly.LoadFrom pour générer une instance du type souhaité. Utilisez d’abord la réflexion pour trouver le type. Activator.CreateInstance

<code class="language-csharp">Assembly assembly = Assembly.LoadFrom("MyNice.dll");

Type type = assembly.GetType("MyType");

object instanceOfMyType = Activator.CreateInstance(type);</code>

Solution améliorée

Étant donné un nom de fichier d'assemblage et un nom de type,

peut être résolu en un type. Cela peut être enveloppé avec un bloc try/catch pour la gestion des erreurs. Si cela échoue, les répertoires dans lesquels d’autres assemblys peuvent exister sont recherchés et les méthodes précédentes sont appliquées si nécessaire. Activator.CreateInstance(assemblyName, typeName)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn