Comment accéder à une classe interne d'un assembly? Supposons que je souhaite accéder à System.ComponentModel.Design.DesignerHost. Ici, le DesignerHost est une classe interne et scellée.
Comment puis-je écrire un code pour charger l'assembly et le type?.
En général, vous ne devriez pas faire cela - si un type a été marqué en interne, cela signifie que vous n'êtes pas censé l'utiliser depuis l'extérieur de l'assembly . Il pourrait être supprimé, modifié, etc. dans une version ultérieure.
Cependant, la réflexion permet d'accéder à des types et des membres qui ne sont pas publics - il suffit de rechercher les surcharges qui prennent un argument BindingFlags
, et incluez BindingFlags.NonPublic
dans les drapeaux que vous passez.
Si vous avez le nom complet du type (y compris les informations d'assemblage), il suffit d'appeler Type.GetType(string)
= devrait fonctionner. Si vous connaissez l'assembly à l'avance et connaissez un type public au sein de cet assembly, l'utilisation de typeof(TheOtherType).Assembly
pour obtenir la référence de l'assembly est généralement plus simple, alors vous pouvez appeler Assembly.GetType(string)
.
Pour charger l'assemblage et taper que vous avez cité dans votre exemple:
Assembly design = Assembly.LoadFile(@"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Design.dll");
Type designHost = design.GetType("System.ComponentModel.Design.DesignerHost");