【问题标题】:Whats the utility of public constructors in abstract classes in C#?C# 抽象类中公共构造函数的用处是什么?
【发布时间】:2010-12-13 12:40:10
【问题描述】:

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

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

【问题讨论】:

    标签: c# constructor abstract-class


    【解决方案1】:

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

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

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

    【讨论】:

    • 有一些带有反射的边缘情况可以通过公开抽象类构造函数来简化......但它们非常罕见。我通常同意抽象类中的构造函数应该受到保护(如果它们被其他构造函数重载调用,则应该是私有的)。
    【解决方案2】:

    是的,你是对的,实际上公共构造函数在抽象类中没有用,因为你不能创建它们。

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      • 2014-12-23
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      相关资源
      最近更新 更多