假设我有一个简单的基类,它具有适用于不同场景的互斥构造函数。
abstract class ExampleA
{
protected ExampleA(int intParam)
{
}
protected ExampleA(string stringParam)
{
}
}
我的子类大部分只需要实现一个扩展单个基础构造函数的构造函数。一切都很好。但是,我有一个特殊情况,必须在标准工作流程之外初始化子类。
class ExampleB : ExampleA
{
private readonly int myMagicInt;
public ExampleB(ExampleC instanceC)
: base(instanceC.someString)
{
// Derive readonly values here.
}
public ExampleB(ExampleD instanceD)
: base(instanceD.someInt)
{
// Derive readonly values here.
}
}
这是我第一次遇到无法正确链接构造函数的场景;在这种情况下这样做会比在多个地方初始化我的readonly值引入更多的开销。
没有重新架构,有没有一种方法可以用来干净地处理这些场景,或者它是否在C#中根本无法表达而没有额外的复杂性或开销?
虽然我已经考虑过以下解决方案,但这些解决方案对我来说都不比重新架构更吸引人:
答案 0 :(得分:1)
class ExampleB : ExampleA
{
private readonly int myMagicInt;
public ExampleB(ExampleC instanceC)
: this(GetEquivalentIntFromString(instanceC.someString))
{
}
public ExampleB(ExampleD instanceD)
: base(instanceD.someInt)
{
// Derive readonly values here.
}
private static int GetEquivalentIntFromString(string s)
{ //whatever }
}