如果抽象类中的公共构造函数只能由它们的派生类调用,那么它应该与受保护的构造函数在功能上等效。对吗?
在抽象类中声明公共构造函数和受保护构造函数之间有什么区别?你会用它来做什么?为什么编译器不会报错?
如果抽象类中的公共构造函数只能由它们的派生类调用,那么它应该与受保护的构造函数在功能上等效。对吗?
在抽象类中声明公共构造函数和受保护构造函数之间有什么区别?你会用它来做什么?为什么编译器不会报错?
完全正确。你应该更加倾向于使用受保护的构造函数。
编辑:编译器不会报错,但是像FxCop(和代码分析)这样的工具会有警告。我认为在抽象类的公共构造函数上可能存在一些奇怪的反射技巧,但从为其他开发人员编写子类提供基类功能的角度来看,应该使用受保护的构造函数。
你是正确的。在抽象类中,公共构造函数与受保护的构造函数在功能上是等价的。
我更喜欢在这种情况下使用受保护的构造函数。
虽然编译器不会对此抱怨,但编译器会抱怨尝试生成抽象类的实例。Visual Studio也足够聪明,如果您尝试实例化抽象类,则不会提供Intellisense。
是的,你说得对,在抽象类中,公共构造函数实际上没有用处,因为你无法创建它们。
然而,编译器不会抱怨,因为在c#的语境下,有很多无用的东西可以写,但它将无法检查其逻辑含义,只能检查其所设置的解析规则。
当然,c#的创建者专注于创建编译语法(规则),这些规则实际上是有害的,违反了语言使用规范。