如何使用reflection访问内部类

我如何访问程序集的内部类? 说我想访问System.ComponentModel.Design.DesignerHost。 这里的DesignerHost是一个内部密封的类。

我如何编写一个代码来加载程序集和types?

一般来说,你不应该这样做 – 如果一个types被标记为内部的,这意味着你不打算在程序集外使用它。 它可以在更高版本中删除,更改等。

然而,reflection确实允许你访问非公有的types和成员 – 只要查找带有BindingFlags参数的重载,并在你传递的标志中包含BindingFlags.NonPublic

如果你有types的完全限定名(包括程序集信息),那么只要调用Type.GetType(string)可以了。 如果您事先知道程序集并知道该程序集中的公用types,那么使用typeof(TheOtherType).Assembly来获取程序集引用通常会更简单,那么您可以调用Assembly.GetType(string)

加载你的例子中引用的程序集并键入:

 Assembly design = Assembly.LoadFile(@"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Design.dll"); Type designHost = design.GetType("System.ComponentModel.Design.DesignerHost");