繁体   English   中英

在多级 Inheritance WPF C# 中调用构造函数

[英]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。

现在,如果您希望MainViewTemplateWindow继承,您只需在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM