【发布时间】: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