Chargement dynamique C# de DLL
Le chargement et l'utilisation de DLL au moment de l'exécution sont un scénario courant dans les applications C#. Cela permet aux développeurs de charger du code externe et d'étendre les fonctionnalités de leurs programmes.
Utilisez généralement Assembly.LoadFile()
pour charger les DLL au moment de l'exécution. Cependant, le simple chargement de la DLL ne fournit pas un accès immédiat à ses méthodes. C’est là qu’interviennent les notions de réflexion et d’objets dynamiques.
Réflexion
La réflexion implique la vérification et la manipulation des types au moment de l'exécution. Il est capable d'accéder à des membres et d'appeler des méthodes inconnues au moment de la compilation. Dans l'exemple fourni, vous pouvez utiliser la réflexion pour appeler la méthode "Output" depuis une DLL chargée :
<code class="language-csharp">foreach (Type type in DLL.GetExportedTypes()) { var c = Activator.CreateInstance(type); type.InvokeMember("Output", BindingFlags.InvokeMethod, null, c, new object[] {@"Hello"}); }</code>
Dynamique (.NET 4.0 et supérieur)
Les objets dynamiques permettent une plus grande flexibilité dans l'accès dynamique aux membres et aux méthodes d'appel. En utilisant le mot-clé dynamic
, vous pouvez convertir une instance d'un type chargé en dynamic
et accéder directement à ses membres :
<code class="language-csharp">foreach (Type type in DLL.GetExportedTypes()) { dynamic c = Activator.CreateInstance(type); c.Output(@"Hello"); }</code>
Dans les deux cas, le code appelle avec succès la méthode "Output" à partir de la DLL chargée au moment de l'exécution, vous permettant d'accéder à ses fonctionnalités dans votre application C#.
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!