如何解决建筑陷阱

本文关键字:建筑 陷阱 解决 何解决 | 更新日期: 2023-09-27 18:28:23

我的项目(C#mvc)类继承了一个基类,出于某种原因,我需要在具有以下参数的基类上创建构造函数:

Public class MyBase
{
 Public MyBase(string param1, string param2, string param3)
{
}
}
Public class MyClass : MyBase
{
}

现在的问题是,在每个派生类上都需要定义带有参数的基类构造函数。如果我没有在派生类中定义基类构造函数,则显示错误"无参数构造函数"为基类构造函数在每个类上编写代码是很痛苦的,有什么方法可以避免这种工作

如何解决建筑陷阱

消除错误的唯一方法是添加一个无参数构造函数,但这显然不理想,因为您需要指定参数。

在Visual Studio 2015中,您可以单击错误并单击"生成构造函数",这使得添加构造函数的过程更加容易。

请参阅此答案,了解其背后的一些解释。

您必须重新声明构造函数,因为它们实际上不是继承的。如果您认为构造函数在某些方面有点像静态方法,那么这是有道理的。

如果我说得对,你想要一个从你的基派生的类,但你不想覆盖基构造函数。这里有一个你可能喜欢的解决方案。若你们隐藏了你们班的结构呢?

public class MyBase
{
    public MyBase(string param1, string param2, string param3)
    {
    }
}
public class MyClass: MyBase
{
    // notice - hide constructor - private
    private MyClass(string p1, string p2, string p3) : base(p1, p2, p3)
    {
    }
    public static MyClass Create()
    {
        return new MyClass(null, null, null);
    }
}

使用

var c = MyClass.Create();

因此,您的调用者不必担心使用构造函数。此外,您现在可以完全更改派生类的构造