C#学习教程:为什么`Assembly`和`Module`没有公开定义的构造函数?分享


为什么`Assembly`和`Module`没有公开定义的构造函数?

我正在用C#构建一个.NET程序集加载器,用于“实验”/了解有关.NET内部操作的更多信息。 我通过派生类型来实现reflectionAPI:

不幸的是我遇到了麻烦,因为以下没有可公开访问的构造函数,所以我不能从它们派生:

我需要从RuntimeType.get_AssemblyRuntimeType.get_Module返回一些东西。 建议? 发挥创意 – 我必须这样做。 ;)对于创建RuntimeTypeHandle实例,一些不安全的指针转换可以完成工作,但这并不容易。

暂且不说:现在特别麻烦的是我正在尝试为负载类型打印IL。 对于构造的generics, Type.FullName属性通过AssemblyQualifiedName属性包含generics参数,而AssemblyQualifiedName属性又依赖于Assembly属性。

为什么你不能从他们那里得到? 这两种类型(程序集和模块)都有一个受保护的构造函数,可供派生类型使用。 类型本身是公共的,因此没有问题,它比实际的说明符更不明显。

以下代码编译得很好

 public class MyAssembly : System.Reflection.Assembly { public MyAssembly() : base() {} } 

至于为什么他们没有任何公共建设者。 我对此没有任何直接的了解,但似乎很明显他们想强迫人们从这些课程中获得。 考虑到他们没有抽象成员,这似乎很奇怪。 我唯一能想到的是版本问题,但现在没有任何逻辑可以跳到我的脑海。

编辑

在我阅读280Z28的评论后,我检查了一下,是的,这是.Net 4.0的新function。 在4.0之前,Assembly和Module的构造函数都是内部的,两种类型都是具体的但没有密封。 因此,如果不使用完全受信任的代码做一些邪恶,就不可能在4.0之前进行推导。

上述就是C#学习教程:为什么`Assembly`和`Module`没有公开定义的构造函数?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1031596.html

发表评论

邮箱地址不会被公开。 必填项已用*标注