Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 给抽象类一个构造函数有什么内在的错误吗?_C#_Constructor_Abstract Class - Fatal编程技术网

C# 给抽象类一个构造函数有什么内在的错误吗?

C# 给抽象类一个构造函数有什么内在的错误吗?,c#,constructor,abstract-class,C#,Constructor,Abstract Class,Microsoft设计指南指出抽象类型不应该有构造函数 在我看来,大多数从抽象类派生的类都有一个非常类似于(如果不是完全相同的话)其基的构造函数,这似乎是非常合理的 如果没有其他原因,只有遵循DRY,那么如果抽象类带有构造函数意味着所有派生类现在只需要放置 public DerivedClass() : base() { } 还是我遗漏了什么 没有什么可以阻止您这样做,但是根据定义,抽象类是那些不能实例化的类。因此,如果您创建一个构造函数,请将其设置为

Microsoft设计指南指出抽象类型不应该有构造函数

在我看来,大多数从抽象类派生的类都有一个非常类似于(如果不是完全相同的话)其基的构造函数,这似乎是非常合理的

如果没有其他原因,只有遵循DRY,那么如果抽象类带有构造函数意味着所有派生类现在只需要放置

    public DerivedClass()
        : base()
    {

    }

还是我遗漏了什么

没有什么可以阻止您这样做,但是根据定义,抽象类是那些不能实例化的类。因此,如果您创建一个构造函数,请将其设置为受保护的,而不是公共的,否则您的类将不符合抽象的定义

您提到的指南进一步解释了:

原因:公共类型是抽象的,并且具有公共构造函数

规则说明:抽象类型上的构造函数只能由派生类型调用。因为公共构造函数创建类型的实例,而您不能创建抽象类型的实例,所以具有公共构造函数的抽象类型的设计是错误的

如何修复冲突:若要修复违反此规则的行为,请保护构造函数或不将类型声明为抽象类型


这个问题以前已经问过好几次了。这很好地回答了这个问题:对,具体来说,答案是“定义一个构造函数(通常为受保护的),以便为所有派生类定义一些公共的设置代码,这是完全合理的。”我想我的问题是:如果是这样,为什么指南反对它?MSDN上的文本面向的是
public
constructor,它们确实是胡说八道。是否也为受保护的构造函数发出警告?这会让我感到惊讶。该指南特别要求将抽象类上的公共构造函数更改为protected作为更正。是的,请参阅我的编辑。他们有它在那里,但没有在标题中。啊,是的,没有抓住那部分。让我们一起往前走,这里没什么可看的。谢谢你的帮助=)