代码是什么:base()

mys*_*ack 2 c# inheritance constructor class default-constructor

base()以下代码的目的是什么?

class mytextbox : TextBox
{
    public mytextbox() : base()
    {
        this.Text = "stack";
    }
} 
Run Code Online (Sandbox Code Playgroud)

为什么在设计时显示消息?

我的代码:

 class Class1:TextBox 
{
 public Class1()
 {
     this.Resize += new EventHandler(Class1_Resize);
 }
  void Class1_Resize(object sender, EventArgs e)
  {
      MessageBox.Show("Resize");
  }
}
Run Code Online (Sandbox Code Playgroud)

替代文字

Ani*_*Ani 10

base()在你的代码中是对基类的无参数构造函数的调用myTextBox,恰好是TextBox.请注意,此基础构造函数将在派生类中构造函数的主体执行之前执行.

每个类的构造函数最终必须直接或通过同一类中的链式构造函数调用其基类的构造函数之一.因此,对每个构造函数声明始终存在隐式/显式base(...)或显式this(...)调用.如果省略,则会有一个隐式调用,即基类的无参数构造函数(这意味着在您的示例中调用是多余的).这种声明是否编译取决于基类中是否存在这样的可访问构造函数.base()base()

编辑:两个小问题:

  1. 类层次结构的根没有基类,因此该规则不适用于System.Object唯一的构造函数.
  2. 第一句应该是:" 成功完成的每个非System.Object类的构造函数最终必须调用其基类的构造函数之一." 这里是一个'乌龟一直向下'的例子,其中从不调用基类的构造函数:实例化这样一个类的对象显然会溢出执行堆栈.

// Contains implicit public parameterless constructor
public class Base { } 

// Does not contain a constructor with either an explicit or implicit call to base()
public class Derived : Base
{
    public Derived(int a)
        : this() { }

    public Derived()
        : this(42) { }

    static void Main()
    {
        new Derived(); //StackOverflowException
    }
}
Run Code Online (Sandbox Code Playgroud)