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

时间:2009-11-05 17:36:34

标签: c# constructor abstract-class

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

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

3 个答案:

答案 0 :(得分:22)

绝对正确。你应该支持受保护的构造函数。

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:3)

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

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

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