扩展页面类

时间:2012-08-29 09:30:42

标签: c# wpf xaml inheritance polymorphism

是否可以在C#的WPF工具包(或者其他任何WPF类)中扩展“Page”类? 我试图做的事情:

public class ExtendedPage : Page{
   protected void doStuff(){
      // lots of joy n pleasure
   }
}

public partial class RandomWindow : ExtendedPage{
   private void randomMethod(){
      doStuff(); // causes error
   }
}

我问的原因非常明显:在扩展Page-class(ExtendedPage)之后,子类(RandomWindow)无法访问其基类的方法。 这是(至少是我的猜测)由RandomWindow偏离的情况引起的。由于这个类不幸是由WPF生成的(链接到相应的* .xaml),我无法找到部分类的其他部分。

这个问题可能导致一个非常明显的答案,让我看起来像一个完全白痴,但显然我无法弄清楚。我可能会补充一点,我刚刚开始使用C#,我的编程起源是Java。

确切的错误消息是“'type'的部分声明不能指定不同的基类”(CS0263)。

作为对其中一条评论的回应:* .xaml中的“Page”声明似乎生成了一个代码隐藏文件,其基类是“Page”(而不是ExtendedPage)。改变这似乎也不起作用,编译器抱怨没有找到类型的ExtendedPage。

<Page x:Class="...RandomWindow" ... />
// to
<src:ExtendedPage x:class="...RandomWindow" 
xlmns:src="...ExtendedPage" />

2 个答案:

答案 0 :(得分:5)

  

'type'的部分声明不能指定不同的基类

嗯,那个人很简单,你可能在某处看起来像这样的XAML:

<Page x:Class="MyApp.MyNamespace.RandomWindow" ....>

隐式指定Page作为基础,但您需要:

<local:ExtendedPage x:Class="MyApp.MyNamespace.RandomWindow"
                    xmlns:local="clr-namespace:MyApp.NSContainingExtendedPage"
                    ...>

答案 1 :(得分:0)

  

扩展Page-class(ExtendedPage)后的子类   (RandomWindow)无法访问其基础

的方法

这是错误的。如果可能的话,扩展类可以让您访问基类的所有publicprotected成员。

部分仅与不同文件中类的代码的分布有关,但与之后的真实无关汇编。编译后,它变成一个单一的固体类型。

你在这里发布的内容应该可以正常使用。