Public Objekt aus Klasse in Unterklassen verwenden

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Public Objekt aus Klasse in Unterklassen verwenden

    Moin ihr,

    ich fange mal direkt mit dem Code an …


    VB.NET-Quellcode

    1. Public Class Wartung
    2. Public Property ConnectionData As DBConnection.ConnectionData = Nothing
    3. Sub New(ByVal ConnectionData As DBConnection.ConnectionData)
    4. With Me
    5. .ConnectionData = ConnectionData
    6. End With
    7. End Sub
    8. Public Class DoStuff
    9. Public Sub Cleanup()
    10. Select Case ConnectionData.DatabaseType
    11. Case DBConnection.Enums.DatabaseType.MSSQL
    12. Case DBConnection.Enums.DatabaseType.Oledb
    13. Case Else
    14. Exit Sub
    15. End Select
    16. End Sub
    17. End Class
    18. End Class


    Die Klasse Wartung initialisiere ich beim Starten mit Dim MyWartung as New Wartung(MeinObjekt), um dann innerhalb der Klasse auf das ConnectionData Objekt zuzugreifen.

    In der Unterklasse DoStuff ist dies allerdings nicht möglich, da hier der Zugriff einen Objektverweis erfordert (Code Zeile 10). Wenn ich die Wartung.ConnecitonData als Shared Property definiere, funktioniert es.

    Dann kann ich aber nicht mehr über meine auf MyWartung.ConnectionData, sondern muss auf Wartung.ConnectionData zugreifen.

    Ich hoffe ihr versteht mein Problem :)

    Gibt's dafür eine Lösung?

    Schönes Wochenende schonmal

    BlueLagoonX schrieb:

    In der Unterklasse DoStuff ist dies allerdings nicht möglich
    Klar, sie weiß nix davon.
    Es ist unerheblich, ob Du die Klasse DoStuff innerhalb oder außerhalb der Klasse Wartung einfügst.
    Wenn Du innerhalb einer Klasse auf etwas von außen zugreifen willst, musst Du es innen als Property deklarieren und bei der Instanziierung befüllen.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. Dim TestInstance As New Wartung.DoStuff
    2. TestInstance.Cleanup()

    Schwupps. Tot. Da man eine DoStuff-Instanz ohne Wartung-Instanz erstellen kann, geht Dein Konstrukt nicht. ConnectionData ist nunmal eine Klasseninstanzproperty. Sie lebt also nur innerhalb einer konkreten Objektinstanz und ist keine Bauplanproperty (Shared). Und daher kann DoStuff nicht einfach so darauf zugreifen.

    btw: Es stellt sich mir die Frage, ob DoStuff - was immer diese Klasse auch tut - überhaupt eine Subklasse von Wartung sein muss/darf/soll. Warum sollte sich Wartung nicht selber ums Aufräumen kümmern? Und was wäre, wenn jemand auf die Idee kommt, mehrere DoStuff-Instanzen zu erstellen: Dürfen die dann alle aufräumen? Da sollte doch vom Prinzip her eine Instanz reichen. Also ein Singleton draus machen? Wohl Overkill. Daher stellt sich die Frage, welche Existenzberechtigung diese nested class hat.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.