抽象类和接口无法实例化。那么为什么System.Reflection.MethodInfo有自己的受保护构造函数。请解释一下吗?
答案 0 :(得分:2)
制作抽象课程'构造函数protected
是一种相当常见的模式。目的是指导程序员实现类/构造函数的预期用途:
它隐藏了构造函数(例如来自Intellisense),在一个人试图实例化类的情况下(使用抽象类是不可能的),因此你得到一个额外的提示,即该类无法实例化。
来自框架设计指南,第4.4章和第34章;抽象类设计":
"只有当用户需要创建该类型的实例时,构造函数才应公开。因为您无法创建抽象类型的实例,所以具有公共构造函数的抽象类型设计不正确并且误导用户。"
同时构造函数仍然可用于子类(例如在Visual Studio的对象资源管理器或其他形式的参考文档中可以看到),暗示类型是意味着以这种方式使用(子类)。