如何解决建筑陷阱

时间:2015-12-30 04:45:05

标签: c# .net

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

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

Public class MyClass : MyBase
{
}

现在的问题是,在每个派生类上都需要使用parameter定义基类构造函数。如果我没有在派生类中定义基类构造函数,那么显示错误“参数less constructor” 在基类构造函数的每个类上编写代码是痛苦的,有没有办法避免这项工作

2 个答案:

答案 0 :(得分:1)

摆脱错误的唯一方法是添加一个参数less constructor,但是这显然不是理想的,因为你需要指定参数。

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

请参阅此answer以了解此背后的一些解释。

  

你必须重新声明构造函数,因为它们实际上没有被继承。如果你认为构造函数在某些方面有点像静态方法,那就有意义了。

答案 1 :(得分:0)

如果我说得对,你想要一个派生自你的基础的课程,但你不想覆盖基础构造函数。这是您可能喜欢的一种解决方案。如果你隐藏你班级的建设怎么办?

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();

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