2012-05-02 6 views
5

Wiem, że są informacje na ten temat w Internecie, ale mam problemy z tłumaczeniem tego na moją sytuację.Częściowe deklaracje nie mogą określać różnych klas bazowych

Mam okno xaml i otrzymuję błąd: Częściowe deklaracje "GX3OpenStackupGUIPlugin.GX3OpenStackupGUIPlugin" nie mogą określać różnych klas bazowych .

Mój kod za to:

public partial class GX3OpenStackupGUIPlugin : GX3ClientPlugin, IGX3PluginInterface 
    { 

Moje XAML jest:

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

Proszę może ktoś doradzić :)

Oto link do tego, co znalazłem, ale zmagam się przetłumacz ... Partial declarations must not specify different base classes

Po wykonaniu litt Jeszcze więcej badań Odkryłem, że jeśli zmienię swój kod, aby zaimplementować element najwyższego poziomu w moim xaml, pozbywam się błędu. To oczywiście nadal problem, ponieważ moja klasa kodu wymaga implementacji interfejsów, które zaprojektowałem.

+0

Obie te odpowiedzi mają dla mnie sens, ale nie mogę znaleźć, gdzie jest "inna" definicja klasy częściowej. Jakieś pomysły? – user589195

+0

Po usunięciu częściowe narzeka, że ​​jest inna częściowa deklasyfikacja klasy, ale po wyszukaniu nazwy klasy nic nie produkuje :( – user589195

+0

Czy masz plik XAML dla GX3OpenStackupGUIPlugin (tj. Czy jest to kontrola WPF) lub czy to tylko zwykła klasa C#? Jeśli jest to plik XAML, czy możesz opublikować górną część XAML, tak jak zrobiłeś to dla swojej siatki? – Ian

Odpowiedz

1

Będą dwie (lub więcej) części tego partial class. Jeśli wyszukasz, powinieneś znaleźć innyclass GX3OpenStackupGUIPlugin, który prawdopodobnie określa coś jak Control jako typ podstawowy. Patrzysz tylko na jedną część pliku. Druga połowa prawdopodobnie musi zostać rozwinięta spod xaml.

Problemem jest to, że dwa pliki robią coś takiego:

(plik pierwszy)

public partial class GX3OpenStackupGUIPlugin : GX3ClientPlugin, IGX3PluginInterface {} 

(plik drugi)

public partial class GX3OpenStackupGUIPlugin : SomethingElse {...} 
2

oświadczenia partial class znaczy można Podaj kod dla tej samej klasy w 2 różnych plikach:

AOther.cs

public partial class A 
{} 

A.cs

public partial class A 
{} 

Błąd ten jest informacją, że klasy zdefiniowanie różnych baz.

AOther.cs

public partial class A : B 
{} 

A.cs

public partial class A : X 
{} 

W przykładzie A nie może dziedziczyć z B i X w różnych plikach. Myślę, że możliwe jest określenie łańcucha dziedziczenia w XAML, ale nie widzę nic, co robi to w swoim opublikowanym kodzie.

Aktualizacja

ze zmianami na pytanie w komentarzu proponuję następujące. Zamiast patrzeć na dziedziczenie, aby twoje sterowanie/okno dziedziczyło z GX3ClientPlugin, powinieneś spojrzeć na kompozycję. Zasadniczo oznacza to umieszczenie instancji GX3ClientPlugin w formularzu i przejście do niego. W razie potrzeby zapisz interfejs klasy GX3ClientPlugin, aby formularz zaimplementował go, ale dla każdej metody wystarczy wywołać instancję, którą trzyma pod spodem. Uważam, że dziedziczenie jest niewłaściwym sposobem rozwiązania tego problemu, ponieważ twoja klasa ma 2 obawy - logikę UI i GX3ClientPlugin.

8

Pytanie, które łączyłeś zawiera odpowiedź. Osoba, która zwróciła na to pytanie zaczęło się od tego (który pracował):

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

I zmienili go do tego (co nie działa):

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

To nie działa, ponieważ, za sceny, plik .cs jest generowana na podstawie XAML, który zawiera częściową klasę, która dziedziczy A. aby go naprawić, musieli zmienić go na to:

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

Więc w twoim przypadku, wierzę ci powinien zastąpić siatkę, to znaczy zrobić coś takiego:

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

(zakładam, że GX3ClientPlugin ostatecznie dziedziczy z siatki lub coś podobnego UserControl?)

+0

Nie robi, ale wygląda na to, że będzie trzeba. – user589195

+1

Ok, więc dlaczego nie mogę dziedziczyć z klasy okna i innej klasy w tym samym czasie? – user589195

+0

Nie wierzę. NET obsługuje wiele dziedziczenia, ale zobacz także mój komentarz pod oryginalnym pytaniem. – Andrew

4

mam ten błąd, gdy próbowałem dziedziczą TabItem. W .cs wyglądało:

public partial class ucTabItemSelectionCriteria : TabItem 

Pierwsza linia XAML wyglądało:

<UserControl 

to był niedopasowania, które pojawiają się, gdy kod został wygenerowany z XAML. Został on ustalony przy zmianie pierwsze 2 linie XAML do:

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

Teraz obie są dziedziczone z kontroli TabItem.

Powiązane problemy