在C#中调用基础构造函数

Dot*_*ude 19 c# asp.net

我有以下层次结构:

class Base
{
  public Base(string sMessage)
  {
     //Do stuff
  }
}

class Derived : Base
{
  public Derived(string someParams)
  {

   string sMessage = "Blah " + someParams;

   //Here I want to call the base constructor
   //base(sMessage);

  }

}
Run Code Online (Sandbox Code Playgroud)

Ore*_*ost 19

您必须在派生类构造函数的主体之前调用基类构造函数.

class Derived : Base
{
  public Derived(string someParams)
    : base("Blah " + someParams)
  {

  }

}
Run Code Online (Sandbox Code Playgroud)


Din*_*nah 8

你不能.您可以在之前调用它:

public Derived() : base()
Run Code Online (Sandbox Code Playgroud)

或者你必须使用一个钩子

class Base
{
  protected void init() { }
  public Base(string sMessage)
  {
     init();
  }
}

class Derived : Base
{
  public Derived(string someParams)
  {
   string sMessage = "Blah " + someParams;
   init();
  }
}
Run Code Online (Sandbox Code Playgroud)


小智 7

我最初错过了OregonGhost关于使用静态方法修改参数的评论,这对我来说是最有用的,所以我想我会为阅读这个帖子的其他人添加一个代码示例:

class Base
{
    public Base( string sMessage )
    {
        // Do stuff
    }
}

class Derived : Base
{
    public Derived( string sMessage ) : base( AdjustParams( sMessage ) )
    {
    }

    static string AdjustParams( string sMessage )
    {
        return "Blah " + sMessage;
    }
}
Run Code Online (Sandbox Code Playgroud)