什么时候我需要在c#中调用base() ?

本文关键字:base 调用 什么时候 | 更新日期: 2023-09-27 18:08:22

我的BaseClass构造函数被调用,而我在派生类中有一个构造函数,所以我什么时候需要调用base() ?

class BaseClass
{
    public BaseClass()
    {
        Debug.Print("BaseClass");
    }
}
class InheritedClass : BaseClass
{
    public InheritedClass()
    {
        Debug.Print("InheritedClass");
    }
}
private void Form1_Load(object sender, EventArgs e)
{
    InheritedClass inheritedClass = new InheritedClass();
}

输出
'Inheritance.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:'WINDOWS'Microsoft.Net'assembly'GAC_MSIL'Accessibility'v4.0_4.0.0.0__b03f5f7f11d50a3a'Accessibility.dll'
'Inheritance.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:'WINDOWS'Microsoft.Net'assembly'GAC_MSIL'System.Configuration'v4.0_4.0.0.0__b03f5f7f11d50a3a'System.Configuration.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
BaseClass
InheritedClass
The thread 'vshost.RunParkingWindow' (0x12b4) has exited with code 0 (0x0).
The thread '<No Name>' (0x85c) has exited with code 0 (0x0).
The program '[4368] Inheritance.vshost.exe: Program Trace' has exited with code 0 (0x0).
The program '[4368] Inheritance.vshost.exe: Managed (v4.0.30319)' has exited with code 0 (0x0).

什么时候我需要在c#中调用base() ?

当你有一个非默认的基构造函数(例如:

的例子:

public class BaseClass
{
  public BaseClass(int number)
  {
     // DoSomething
  }
  public BaseClass(string str)
  {
    // Do Something
  }
}
public class DerivedClass : BaseClass
{
   public DerivedClass(): base(7){} 
   public DerivedClass(string str) : base(str){}
}

默认的base()构造函数本身是自动调用的。

public class DerivedClass : BaseClass
{
   public DerivedClass(): base() // No harm done, but this is redundant
   {}
   //same as
   public DerivedClass()
   {}
}

唯一不被自动调用的情况是当调用其他东西时,比如参数基构造函数。正如阿米尔·波波维奇的精彩回答。