我应该如何在类层次结构中链接构造函数?

Mih*_*hai 7 .net c# constructor

我们有以下类层次结构:

public class Base
{
    public Base()
    {
        // do generic initialization 
    }

    public Base(SomeClass param1) : this()
    {
        // init properties that require param1
    }

    public Base(SomeClass param1, OtherClass param2) : this(param1)
    {
        // init properties that require param2
    }

    // ...
}

public class Derived : Base
{
    public Derived()
    {
        // do custom initialization 
    }

    public Derived(SomeClass param1) : this() // ???
    {
        // do custom initialization using param1
    }

    public Derived(SomeClass param1, OtherClass param2) : this(param1) // ???
    {
        // do custom initialization using param2
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

我们将需要Derived运行两个自己的初始化程序;环比上涨,而从基类对应的.我们如何链接构造函数而不重复代码/运行一些构造函数两次?

Pol*_*fun 5

在派生类链中,构造函数的参数最少的构造函数具有最多参数,然后具有最多参数的派生构造函数被链接到base.像这样的东西:

public class Base 
{
  public Base() : this(null, null)
  {
  }
  public Base(SomeClass param1) : this(param1, null)
  {
  }
  public Base(SomeClass param1, OtherClass param2)
  {
    if (param1 != null)
    {
      // initialise param1
    }
    if (param2 != null)
    {
      // initialise param2
    }
  }
}

public class Derived : Base
{
  public Derived() : this(null, null)
  {
  }
  public Derived(SomeClass param1) : this(param1, null)
  {
  }
  public Derived(SomeClass param1, OtherClass param2) : base(param1, param2)
  {
  }
} 
Run Code Online (Sandbox Code Playgroud)

根据上下文,最好使用default(T)而不是null来指示缺失/默认值.