Kann ich vom Kind aus, der Elternklasse eine Variable verpassen?

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von thefiloe.

    Kann ich vom Kind aus, der Elternklasse eine Variable verpassen?

    Hallo Leute und danke für's reinschauen...

    Hab kleines Problem: Habe Klasse B, C und D, die von der Klasse A erben. Jetzt kann ich Klasse z.B. B sowohl in A wie in B Converten. Blöderweise kann ich nicht direkt erkennen ob es sich um die Klasse B, C oder D handelt. Also converte ich in A. Dort fehlt mir aber eine Variable... Kann ich es der Klasse A irgend wie eine Variable verpassen, dass ich nicht Klasse B, C und D überarbeiten muss? ?(

    Wenn ich nämlich eine Klasse Z dazwischen schalte, sodass Klasse B, C und D von der Klasse Z erbt, die wiederum von A erbt, erzählt mir der Compiler von dem Fehler:


    Fehler 15 Partielle Deklarationen von 'B' dürfen keine unterschiedlichen Basisklassen angeben.


    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „EugenIS“ ()

    EugenIS schrieb:

    der Klasse A erben
    So was:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    3. Dim aa As New a
    4. MessageBox.Show(aa.GetType.ToString)
    5. End Sub
    6. End Class
    7. Class xx
    8. End Class
    9. Class a
    10. Inherits xx
    11. End Class

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. MessageBox.Show(aa.GetType.ToString)

    EugenIS schrieb:

    Ich weiß
    X(
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    EugenIS schrieb:

    Dann muss ich ja wieder
    k

    EugenIS schrieb:

    eine Variable verpassen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    EaranMaleasi Danke...

    Aber ich glaube er ist verärgert, weil ich die Frage bearbeitet habe...

    Mir gehts eigentlich darum, wie ich UserControl vererbe zu EugenUserControl und ein WPF Seite daraus mache... EugenUserControl kann ich ja erweitern wie ich will... Der mekert aber....

    EugenIS schrieb:

    verärgert
    isser nich, Dein Eröffnungspost ist nur leicht unverständlich enthält die Buchstabenfolge WPF nicht. ;(
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Du hast eine partielle Klasse 'B'. Das heißt die Klasse ist aufgesplittet auf zwei Dateien und als partial gekennzeichnet. Der Sinn davon ist, dass z.B. generierter langer Code in eine andere Datei ausgelagert wird, beim compilieren jedoch beide Dateien zusammengefügt werden und die vollständige Klasse (bestehend aus beiden bzw. mehreren Teilen) compiliert wird.
    Eine Klasse kann nur von einer Klasse erben. Das ist klar. Wenn du jetzt in deinen beiden Teilen eine unterschiedliche Basisklasse angibst, bekommst du ein Problem. Und zwar insofern, dass das der Compiler nicht interpretieren kann. Entweder müsste er eine der beiden Basisklassen aussuchen, was nur geraten wäre. Alternativ könnte er auch von beiden erben lassen, darf man in VB.NET, C#, ... aber lt. Spezifikation nicht. Kurz: Wahrscheinlich hast du beim ändern der Basisklasse vergessen, dass du sie an einer zweiten Stelle auch ändern möchtest.

    Zu deiner anderen Spagetti-Frage:
    Wenn du Klasse A hast von welcher B, C und D direkt erben, dann kannst du sehr wohl wissen, dass Objekt vom Typ B nicht C oder D ist.
    Die Frage ob es vom Typ A oder B ist, stellt sich nicht weil es offensichtlich vom Typ B ist und als Mutterklasse A hat -> somit beides ist.
    Du hast damit Zugriff auf alle public Elemente vom A und B aber garantiert nicht von C und D.
    Du kannst natürlich eine variable vom Typ A haben welche dann sowohl B, C und D sein KANN. Da kann man zur Laufzeit prüfen ob das der Fall ist und wenn dies der Fall ist in den entsprechenden Typ casten.

    Du kannst natürlich Klasse A anpassen, sofern das deine eigene Klasse ist und diese nicht aus irgendwelchen Bibliotheken stammt. In diesem Fall wäre der korrekte Weg eine neue Klasse zwischen A und deren abgeleiteten Klassen B, C und D, zu schalten. Das wird auch garantiert funktionieren.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.