如何访问程序集的内部类?假设我想访问 System.ComponentModel.Design.DesignerHost。这里的 DesignerHost 是一个内部的密封类。
如何编写代码来加载程序集和类型?
如何访问程序集的内部类?假设我想访问 System.ComponentModel.Design.DesignerHost。这里的 DesignerHost 是一个内部的密封类。
如何编写代码来加载程序集和类型?
一般来说,你不应该这样做——如果一个类型被标记为内部,这意味着你不打算从程序集外部使用它。它可以在以后的版本中删除、更改等。
但是,反射确实允许您访问不公开的类型和成员 - 只需查找带BindingFlags
参数的重载,并包含BindingFlags.NonPublic
在您传递的标志中。
如果您有类型的完全限定名称(包括程序集信息),那么只需调用即可Type.GetType(string)
。如果您事先知道程序集,并且知道该程序集中的公共类型,那么使用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");