5 Stimmen

Teildeklarationen von dürfen keine unterschiedlichen Basisklassen angeben

Ich weiß, dass es im Internet Informationen dazu gibt, aber ich habe Probleme, sie auf meine Situation zu übertragen.

Ich habe ein Xaml-Fenster und im erhalten den Fehler: Partielle Deklarationen von 'GX3OpenStackupGUIPlugin.GX3OpenStackupGUIPlugin' dürfen keine unterschiedlichen Basisklassen angeben .

Mein Code dahinter ist:

public partial class GX3OpenStackupGUIPlugin : GX3ClientPlugin, IGX3PluginInterface
    {

Mein Xaml ist:

<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">

Kann mir jemand einen Rat geben :)

Hier ist ein Link zu dem, was ich gefunden habe, aber ich habe Mühe, es zu übersetzen... Partielle Deklarationen dürfen keine unterschiedlichen Basisklassen angeben

Nachdem ich ein wenig mehr Forschung habe ich entdeckt, dass, wenn ich meinen Code hinter ändern, um die oberste Ebene Element in meinem Xaml implementieren es loswerden der Fehler. Das ist natürlich immer noch ein Problem, wie meine Codebehind-Klasse die Schnittstellen implementieren muss, die ich entworfen habe.

8voto

Andrew Punkte 895

Die von Ihnen verlinkte Frage enthält die Antwort. Die Person, die diese Frage gestellt hat, begann mit dieser (die funktionierte):

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

Und sie änderten es in das hier (was nicht funktionierte):

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

Das funktioniert nicht, weil hinter den Kulissen eine .cs-Datei auf der Grundlage der XAML generiert wird, die eine Teilklasse enthält, die von A erbt:

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

In Ihrem Fall sollten Sie also Grid ersetzen, d.h. etwas in dieser Art tun:

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

(Ich nehme an, dass GX3ClientPlugin letztlich von etwas wie Grid oder UserControl erbt?)

4voto

JBrooks Punkte 9570

Ich habe diesen Fehler erhalten, als ich versucht habe, ein TabItem zu erben. Die .cs sah aus wie:

public partial class ucTabItemSelectionCriteria : TabItem

Die erste XAML-Zeile sah so aus:

<UserControl 

Das war die Fehlanpassung, die angezeigt wurde, wenn Code aus der XAML generiert wurde. Es wurde behoben, wenn ich die ersten 2 Zeilen der XAML zu ändern:

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

Beide werden nun vom TabItem-Steuerelement geerbt.

2voto

Ian Punkte 32230

Partielle Klassendeklarationen bedeuten, dass Sie Code für dieselbe Klasse in 2 verschiedenen Dateien angeben können:

AOther.cs

public partial class A
{}

A.cs

public partial class A
{}

Dieser Fehler besagt, dass die Klassen unterschiedliche Grundlagen definieren.

AOther.cs

public partial class A : B
{}

A.cs

public partial class A : X
{}

In diesem Beispiel kann A nicht von B und X in verschiedenen Dateien erben. Ich denke, es ist möglich, die Vererbungskette in XAML anzugeben, aber ich kann nichts sehen, was dies in Ihrem geposteten Code tut.

Update

Mit den Änderungen an der Frage in dem Kommentar schlage ich Folgendes vor. Anstatt auf Vererbung zu setzen, um Ihr Steuerelement/Fenster von einem GX3ClientPlugin erben zu lassen, sollten Sie auf Komposition setzen. Im Wesentlichen bedeutet dies, dass Sie eine Instanz eines GX3ClientPlugin auf Ihrem Formular platzieren und es aufrufen. Wenn es nötig ist, schreiben Sie eine Schnittstelle für die GX3ClientPlugin-Klasse, lassen Sie das Formular sie implementieren, aber für jede Methode rufen Sie einfach die Instanz auf, die darunter liegt. Ich denke, Vererbung ist der falsche Weg, um mit diesem Problem zu gehen, wie Ihre Klasse hat 2 Anliegen - UI und GX3ClientPlugin Logik.

1voto

Marc Gravell Punkte 970173

Dazu gibt es zwei (oder mehr) Teile partial class . Wenn Sie suchen, sollten Sie Folgendes finden eine andere class GX3OpenStackupGUIPlugin die wahrscheinlich etwas wie folgt spezifiziert Control als Basistyp. Sie sehen sich nur einen Teil der Datei an. Die andere Hälfte muss wahrscheinlich unter der xaml erweitert werden.

Das Problem ist, dass zwei Dateien etwas Ähnliches tun:

(die erste Datei)

public partial class GX3OpenStackupGUIPlugin : GX3ClientPlugin, IGX3PluginInterface {}

(die zweite Datei)

public partial class GX3OpenStackupGUIPlugin : SomethingElse {...}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X