【问题标题】:Multiple constructors with inheritance c#具有继承c#的多个构造函数
【发布时间】:2015-01-17 06:01:21
【问题描述】:

我有一个带有多个构造函数的基类 B。我有一个派生类 D,它在其构造函数中设置了一些额外的字段,实现如下所示。

B(args1) {...}
B(args2) {...}
...
B(argsN) {...}

D(args1, additional) : B(args1) {...}
D(args2, additional) : B(args2) {...}
...
D(argsN, additional) : B(argsN) {...}

问题是,每次为新的 B 构造函数添加新参数时,我都必须创建一个新的 D 构造函数。有什么办法吗?

【问题讨论】:

  • 默认值有帮助吗? D(argsN=null)?我会考虑你是否总是需要一个新的构造函数..
  • 创建一个类。然后将它的一个实例作为参数传递。那时每个类只需要 1 个构造函数。否则我认为没有出路。对于B 类,假设是BArgs,对于D - DArgs : Bargs。然后您将 DArgs 传递给 B 构造函数。 DArgs 将使用您的 additional 参数扩展 BArgs
  • 您确定不能用具有公共设置器的属性替换构造函数参数吗?还是 SetSomething 方法?因为在这种情况下,您的维护会变得容易得多。
  • 闻起来像一个糟糕的设计。为什么D继承自B?也许D 可以简单地创建并保存B 的实例?通常在这种情况下您不会选择继承。而且你明白,添加B(argsX) 不需要从D要求 来实现D(argsX, additional)

标签: c# inheritance constructor


【解决方案1】:

如果你想在基类中定义一个构造函数并期望它们是相同的,你必须在派生类中定义一个构造函数。但是,您可以按照建议使用默认值。或者,有一个基于字典的构造函数,派生类从中获取值。

您能否使用工厂方法、工厂等替代设计模式来简化构造方法?

如果你真的想要构造函数并想添加一个复杂的解决方案,请使用以下内容。不推荐,但您可以使用代码共享/生成技术与部分类的组合(使用构造函数定义一个部分类,另一个具有所有属性/成员/等),并且在该部分类中具有构造函数,当基本模板更改时,T4 模板会覆盖它。同样,这会增加很多开销...我不知道您在谈论多少个课程,以及您想要它们的确切程度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多