2

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

class mytextbox : TextBox
{
    public mytextbox() : base()
    {
        this.Text = "stack";
    }
} 

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

我的代码:

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

替代文字

4

2 回答 2

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
    }
}
于 2010-10-10T05:51:35.143 回答
2

不知道,没必要。构造函数总是自动调用基类构造函数,而无需您显式编写它。但这就是它的意思。如果您不想调用无参数构造函数而是需要一个参数的构造函数,则必须编写它。

于 2010-10-10T05:48:44.530 回答