[英]Calling Constructors in Multi-Level Inheritance WPF C#
我无法在 wpf windows 中调用基本构造函数:
public class TemplateWindow : Window //Template window class
{
public TemplateWindow (int no)
{
}
}
public partial class MainView : TemplateWindow
{
public MainView() : base(1) //error here
{
InitializeComponent();
}
}
它在指定位置给了我一个错误,因为它显然试图用 base 调用 Window 构造函数。 MainView class 是 xaml window 后面的代码。
但是,当我像下面这样测试问题时,它工作得非常好。
class A //Base Class
{
public A() { }
}
class B : A
{
public B(int no) { }
}
partial class C : B
{
public C() : base(1) { }
}
我究竟做错了什么?
您在 XAML 中定义了MainView
class,不是吗? 它可能是这样的:
<Window x:Class="MyNamespace.MainView" ... >
...
</Window>
注意开头的大字Window
。 它告诉编译器您希望此 XAML 生成一个名为MyNamespace.MainView
,并且您希望它继承自Window
。 这就是编译器所做的:它会愉快地生成您的 class 并使其继承自Window
。 右键单击InitializeComponent
词并选择“转到定义”。 这将带您进入自动生成的文件,您将能够看到 class。
现在,如果您希望MainView
从TemplateWindow
继承,您只需在 XAML 中这样说:
<my:TemplateWindow
xmlns:my="MyNamespace"
x:Class="MyNamespace.MainView" ... >
...
</my:TemplateWindow>
但这会给您带来另一个问题:现在,突然之间,您无法使用视觉设计器。
那是因为设计者无法创建TemplateWindow
class 的实例进行编辑。 为什么? 好吧,因为TemplateWindow
当然没有默认构造函数!
因此,要使这种事情起作用,您只需要在TemplateWindow
中定义两个构造函数——一个是默认的,一个接受一个int
。
祝你好运。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.