什么是公共构造函数在C#中的抽象类中的实用性?

如果抽象类中的公共构造函数只能由其派生类调用,则它应该在function上等同于受保护的构造函数。 对?

在抽象类中声明公共构造函数而不是受保护构造函数有什么区别吗? 你会用它做什么用的? 为什么编译器没有投诉?

完全正确。 您应该支持受保护的构造函数。

编辑:没有编译器不抱怨,但像FxCop(和代码分析)这样的工具。 我相信你可以在抽象类上使用公共构造函数做一些奇怪的reflection技巧,但从一个角度来看,你只是向其他开发人员编写子类提供基类function,坚持使用受保护的构造函数。

你是对的。 抽象类中的公共构造函数在function上等同于受保护的构造函数。

在这种情况下,我更喜欢使用受保护的构造函数。

虽然编译器确实不会抱怨你这样做,但编译器会抱怨尝试生成抽象类的实例。 如果您尝试实例化抽象类,Visual Studio也足够聪明,不提供Intellisense。

是的,你是对的,几乎公共构造函数在abscract类中没有用,因为你无法创建它们。

但是编译器不会抱怨,因为这样你可以在c#的上下文中编写很多无用的东西,但是它无法检查它的逻辑含义,它只能检查它所设置的解析规则。

确定c#创建者专注于创建实际有害且违反语言使用的编译语法(规则)。