如何使用Reflection访问内部类

时间:2009-08-11 09:11:42

标签: c# reflection class internal

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

如何编写代码来加载程序集和类型?。

2 个答案:

答案 0 :(得分:91)

一般情况下,不应这样做 - 如果某个类型已标记为内部,则表示您不打算在程序集外部使用它。它可以在以后的版本中删除,更改等。

然而,反射确实允许您访问非公开的类型和成员 - 只需查找带有BindingFlags参数的重载,并在其中包含BindingFlags.NonPublic你传递的旗帜。

如果您拥有该类型的完全限定名称(包括程序集信息),则只需调用Type.GetType(string)即可。如果您事先知道程序集,并且知道该程序集中的公共类型,那么使用typeof(TheOtherType).Assembly获取程序集引用通常更简单,那么您可以调用Assembly.GetType(string)

答案 1 :(得分:13)

要加载程序集并键入您在示例中引用的内容:

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