我正在C#中构建一个.NET程序集加载器,用于“实验”/了解有关.NET内部操作的更多信息。我通过派生类型来实现反射API:
不幸的是我遇到了麻烦,因为以下没有可公开访问的构造函数,因此我无法从中获取:
我需要从RuntimeType.get_Assembly
和RuntimeType.get_Module
返回一些内容。建议?发挥创意 - 我必须这样做。 ;)对于创建RuntimeTypeHandle
实例,一些不安全的指针转换可以完成工作,但这里并不容易。
顺便说一句:现在特别麻烦的是我正在尝试为负载类型打印IL。对于构造的泛型,Type.FullName
属性通过AssemblyQualifiedName
属性包含通用参数,而Assembly
属性又依赖于{{1}}属性。
答案 0 :(得分:1)
为什么你不能从他们那里得到?这两种类型(程序集和模块)都有一个受保护的构造函数,可用于派生类型。类型本身是公共的,因此没有问题,它比实际的说明符更不明显。
以下代码编译得很好
public class MyAssembly : System.Reflection.Assembly {
public MyAssembly() : base() {}
}
至于为什么他们没有任何公共建设者。我对此没有任何直接的了解,但似乎很明显他们想要迫使人们从这些课程中获得。考虑到他们没有抽象成员,这似乎很奇怪。我唯一能想到的是版本问题,但现在没有任何逻辑可以跳到我的脑海。
修改强>
在我阅读280Z28的评论之后,我检查了一下,是的,这是.Net 4.0的新内容。在4.0之前,Assembly和Module的构造函数都是内部的,两种类型都是具体的但没有密封。因此,如果不使用完全受信任的代码做一些邪恶,那么4.0之前的推导是不可能的。