目的是什么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");
}
}
base()
在您的代码中是对基类的无参数构造函数的调用myTextBox
,这恰好是TextBox
。请注意,此基本构造函数将执行before派生类中构造函数主体的执行。
每个类的构造函数必须最终直接或通过同一类中的链式构造函数调用其基类的构造函数之一。因此,总是存在隐式/显式base(...)
或明确的this(...)
呼吁every构造函数声明。如果省略,则会隐式调用base()
,即基类的无参数构造函数(这意味着调用base()
在你的例子中是多余的)。这样的声明能否通过编译取决于是否存在这样的声明无障碍基类中的构造函数。
EDIT:
两个琐碎的点:
- 类层次结构的根没有基类,因此该规则不适用于
System.Object
的唯一构造函数。
- 第一句话应为:“每一个非
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
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)