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

时间:2011-04-27 18:02:20

标签: c# wpf inheritance

我在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类是xaml窗口的代码。

然而,当我测试下面的问题时,它的效果非常好。

class A //Base Class
{
    public A() { }
}

class B : A
{
    public B(int no) { }
}

partial class C : B
{
    public C() : base(1) { }
}

我做错了什么?

2 个答案:

答案 0 :(得分:1)

您在XAML中定义了MainView类,不是吗?它可能是这样的:

<Window x:Class="MyNamespace.MainView" ... >
    ...
</Window>

请注意开头的大Window字词。它告诉编译器您希望此XAML生成名为MyNamespace.MainView的类,并且您希望它继承自Window。这就是编译器的作用:它很乐意生成你的类并使它继承自Window。右键单击InitializeComponent字,然后选择“转到定义”。这将带您进入自动生成的文件,您将能够看到该类。

现在,如果您希望MainView继承TemplateWindow,您只需在XAML中这样说:

<my:TemplateWindow 
    xmlns:my="MyNamespace" 
    x:Class="MyNamespace.MainView" ... >
    ...
</my:TemplateWindow>

但这会给你另一个问题:现在,突然之间,你无法使用视觉设计师。

那是因为设计人员无法创建TemplateWindow类的实例进行编辑。为什么?好吧,因为TemplateWindow当然没有默认的构造函数!

因此,要使用此类内容,您只需在TemplateWindow中定义两个构造函数 - 一个默认值,另一个接受int

祝你好运。

答案 1 :(得分:0)