【问题标题】:How to solve architectural pitfall如何解决架构陷阱
【发布时间】:2015-12-30 04:45:05
【问题描述】:

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

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

Public class MyClass : MyBase
{
}

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

【问题讨论】:

  • 自定义代码sn-p怎么样?
  • 请检查我的回答。

标签: c# .net


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    如果我没听错,你想要一个从你拥有的基类派生的类,但你不想覆盖基类构造函数。这是您可能喜欢的一种解决方案。如果你隐藏你的类的构造怎么办?

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

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

    【讨论】:

    • TS 感谢您的回复,您的解决方案非常有趣。但我的要求不同,让我们描述一下我不想在我的派生类中做任何事情,没有任何接触或继承或任何我不知道的魅力可能会解决我的问题。希望你理解我想要的。我有 100 多个班级真的很痛苦,我要改变或每条线都放一条线。谢谢您的回复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    相关资源
    最近更新 更多