如何访问程序集的内部类?假设我要访问System.ComponentModel.Design.DesignerHost。这里的DesignerHost是一个内部密封类。
如何编写代码以加载程序集和类型?
Answers:
通常,您不应该这样做-如果类型已标记为内部类型,则意味着您不打算从程序集外部使用它。可以在更高版本中将其删除,更改等。
但是,反射确实允许您访问不公开的类型和成员-只需查找带有BindingFlags
参数的重载,并将其包含BindingFlags.NonPublic
在传递的标志中即可。
如果您具有类型的完全限定名称(包括程序集信息),则只需调用即可Type.GetType(string)
。如果您事先知道该程序集,并且知道该程序集内的公共类型,那么使用typeof(TheOtherType).Assembly
获取程序集引用通常比较简单,则可以调用Assembly.GetType(string)
。
DataGrid
命令,其参数为SelectedItems
。在命令中,该参数的接收object
类型为,但是类型为SelectedCellCollection
,在我的代码中无法访问。我需要这种作弊方法,以期将object
参数转换为SelectedCellCollection
。
要加载程序集并键入您在示例中引用的内容:
Assembly design = Assembly.LoadFile(@"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Design.dll");
Type designHost = design.GetType("System.ComponentModel.Design.DesignerHost");
Assembly.Load("System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
var designHost = Type.GetType("System.ComponentModel.Design.DesignerHost, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");