题
我刚刚看到了遵循代码,但我不理解构造函数声明中基类的推导。这是什么,这有可能使用序数方法?
public SplashAppContext(Form mainForm, Form splashForm) : base(splashForm)
{
this.mainForm = mainForm;
splashTimer.Tick += new EventHandler(SplashTimeUp);
splashTimer.Interval = 2000;
splashTimer.Enabled = true;
}
解决方案
它调用一个基类构造函数,传递论点 splashForm
类型 Form
对此。
您也可以调用基类方法。例如,如果您已经覆盖了要稍微修改的行为的方法,则进行修改,并使用 base.TheMethod()
. 。看起来像这样:
public override void FireMissiles()
{
PrimeMissiles();
base.FireMissiles();
}
调用基类构造函数和基类方法的语法有所不同。
其他提示
您列出的语法意味着该构造函数将带有参数的超类的构造函数调用 splashForm
在继续进行该物体的其余部分之前。当未列出没有超级类构造函数时,假定NO-ARG构造函数,即:
public SplashAppContext(Form mainForm, Form splashForm)
{ ... }
等同于
public SplashAppContext(Form mainForm, Form splashForm) : base()
{ ... }
这是什么...
这条线称为 构造函数初始化器. 。它的意思是“用参数调用基类的构造函数 splashForm
, ,然后启动该构造函数的身体”。
如果未针对构造函数明确指定构造函数初始化器,则假定您想要 base()
, ,无参数构造函数。
...这有可能使用普通方法吗?
对于常规方法,您当然可以调用基类方法(使用 base.SomeMethod(...)
),但是没有可用的“初始化器”样式。
: base(splashForm)
正在调用父构建器并通过 splashForm
对此。
实际上,这并不是真正的继承情况,该语法指定的是,在称为splashappcontext的构造函数之前,应将其基本构造函数称为splashform作为参数。
这是调用直接父类的构造函数的语法。这是c#语法,而vb.net要求您致电 MyBase.New(splashForm)
作为构造函数中的第一行代码。
这样可以表达这一点,因为您可以通过您的子构造代码开始执行时将父对象完全构造和初始化。因此,两个编译器(vb.net和c#)指定您在调用父构建器之前不得执行任何自己的代码(如果您不指定父构建器,并且存在无参数构造函数,则将称为自动地)。
对于其他方法调用,该语法是不可能(也不必需的),因为可以通过调用任何其他函数来调用任何其他函数 base.FunctionName()
在您的代码中。构造函数只是特殊情况,因为他们必须在任何其他代码之前执行。