【问题标题】:Partial declarations of must not specify different base classes的部分声明不得指定不同的基类
【发布时间】:2012-05-02 12:51:27
【问题描述】:

我知道互联网上有这方面的信息,但我无法将其转化为我的情况。

我有一个 xaml 窗口,我收到错误:'GX3OpenStackupGUIPlugin.GX3OpenStackupGUIPlugin'的部分声明不能指定不同的基类 .

我的代码是:

public partial class GX3OpenStackupGUIPlugin : GX3ClientPlugin, IGX3PluginInterface
    {

我的 xaml 是:

<Grid xmlns:my="clr-namespace:CustomControls;assembly=MultiComboBox"   xmlns:extToolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit/extended"   x:Class="GX3OpenStackupGUIPlugin.GX3OpenStackupGUIPlugin"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

请有人建议:)

这是我找到但正在努力翻译的链接... Partial declarations must not specify different base classes

在做了更多研究之后,我发现如果我更改我的代码以在我的 xaml 中实现顶级元素,它会消除错误。这显然仍然是一个问题,因为我的代码隐藏类需要实现我设计的接口。

【问题讨论】:

  • 这两个答案对我来说都很有意义,但我找不到“其他”部分类定义在哪里。有什么想法吗?
  • 当我删除部分时,它抱怨该类还有另一个部分声明,但搜索类的名称不会产生任何东西:(
  • 您有 GX3OpenStackupGUIPlugin 的 XAML 文件(即它是 WPF 控件)还是只是一个普通的 C# 类?如果它是一个 XAML 文件,您可以像为您的 Grid 所做的那样发布 XAML 的顶部吗?
  • 我想我解决了这个问题,但现在不知道如何解决它。我发布的 xaml 是 GX3OpenStackupGUIPlugin.xaml。我需要 GX3OpenStackupGUIPlugin 从 Window 继承。我希望能够使 GX3ClientPlugin 从 Window 类继承,但我不能从 Window 类和另一个类(它需要)继承。
  • 你能让其他类继承自 Window 吗?或者你可以使用组合而不是继承,即让 GX3ClientPlugin 包含你的其他类而不是从它继承?

标签: c# wpf


【解决方案1】:

您链接到的问题包含答案。问这个问题的人是从这个开始的(这很有效):

<A x:Class="B">
public partial class B : A

他们把它改成了这个(没用):

<A x:Class="C">
public partial class C : B

这不起作用,因为在幕后,基于 XAML 生成了一个 .cs 文件,其中包含从 A 继承的部分类。要修复它,他们需要将其更改为:

<B x:Class="C">
public partial class C : B

所以在你的情况下,我相信你应该替换 Grid,即做这样的事情:

<namespace:GX3ClientPlugin x:Class="namespace.GX3OpenStackupGUIPlugin">
public partial class GX3OpenStackupGUIPlugin : GX3ClientPlugin

(我假设 GX3ClientPlugin 最终继承自 Grid 或 UserControl 之类的东西?)

【讨论】:

  • 不需要,但看起来需要。
  • 好吧,为什么我不能同时从 Window 类和另一个类继承呢?
  • 我不相信 .NET 支持多重继承,但另请参阅我在原始问题下的评论。
【解决方案2】:

当我尝试继承 TabItem 时出现此错误。 .cs 看起来像:

public partial class ucTabItemSelectionCriteria : TabItem

XAML 的第一行看起来像:

<UserControl 

这是从 XAML 生成代码时会出现的不匹配。当我将 XAML 的前 2 行更改为:

    <controls:TabItem xmlns:controls= 
"clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"

现在两者都继承自 TabItem 控件。

【讨论】:

    【解决方案3】:

    部分类声明意味着您可以在 2 个不同的文件中为同一类指定代码:

    AOther.cs

    public partial class A
    {}
    

    A.cs

    public partial class A
    {}
    

    这个错误告诉你类定义了不同的基础。

    AOther.cs

    public partial class A : B
    {}
    

    A.cs

    public partial class A : X
    {}
    

    在示例中,A 不能从不同文件中的 B 和 X 继承。我认为可以在 XAML 中指定继承链,但在您发布的代码中我看不到任何这样做。

    更新

    通过对评论中问题的修改,我提出以下建议。与其查看继承以使您的控件/窗口从 GX3ClientPlugin 继承,不如查看组合。本质上,这意味着,在您的表单上放置一个 GX3ClientPlugin 的实例并调用它。如果需要为 GX3ClientPlugin 类编写一个接口,请让表单实现它,但对于每个方法,只需调用它在下面保存的实例。我认为继承是解决这个问题的错误方法,因为您的类有两个问题 - UI 和 GX3ClientPlugin 逻辑。

    【讨论】:

      【解决方案4】:

      partial class 将有两个(或更多)部分。如果您进行搜索,您应该会找到 another class GX3OpenStackupGUIPlugin,它可能将类似 Control 的东西指定为基本类型。您只查看文件的一部分。另一半可能需要从 xaml 下扩展。

      问题是两个文件在做这样的事情:

      (归档第一个)

      public partial class GX3OpenStackupGUIPlugin : GX3ClientPlugin, IGX3PluginInterface {}
      

      (归档第二个)

      public partial class GX3OpenStackupGUIPlugin : SomethingElse {...}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多