none
Klasse an Klassen weitergeben RRS feed

  • Frage

  • Hallo

    Ich möchte die Klasse bzw. das Objekt OBFRM_AllProperties in jeder weiteren aufgerufenen Klasse lesen können, indem ich den Pointer des Objektes weitergebe. 
    Die Member des Objektes OBFRM_AllProperties sehe ich bis CL2_Containerm, aber nicht mehr in CL3_Control (Nothing). 
    Was mache ich falsch bzw. wie kann ich das Problem wie oben beschrieben lösen?
    Oder ist der Ansatz falsch?

    Die Subs, z.B. Public Sub SubBasis(Me), sind nur für das Debuggen da.

    Gruss und Dank
    Philippe

    Partial Class Webform
        Inherits System.Web.UI.Page
        Private OBFRM_AllProperties As New CL_AllProperties
        Private OB1_Basis As New CL1_Basis(OBFRM_AllProperties)
    
        Private Sub form1_Load(sender As Object, e As EventArgs) Handles form1.Load
            OBFRM_AllProperties.CheckContainerRowTypeEditForm = True
            OBFRM_AllProperties.PageName = "DiesIstEinPagename"
            OB1_Basis.SubBasis(Me)
        End Sub
    End Class
    
    Public Class CL1_Basis
        Friend CLPoint1_AllProperties As CL_AllProperties
        Private OB2_Container As New CL2_Container(CLPoint1_AllProperties)
    
        Public Sub New(ByRef OB1_AllProperties As CL_AllProperties)
            CLPoint1_AllProperties = OB1_AllProperties
            OB2_Container.CLPoint2_AllProperties = OB1_AllProperties
        End Sub
        Public Sub SubBasis(Sender As Object)
            OB2_Container.SubContainer(Sender)
        End Sub
    End Class
    
    Public Class CL2_Container
        Friend CLPoint2_AllProperties As CL_AllProperties
        Private OB3_Control As New CL3_Control(CLPoint2_AllProperties)
    
        Public Sub New(ByRef OB1_AllProperties As CL_AllProperties)
            CLPoint2_AllProperties = OB1_AllProperties
            OB3_Control.CLPoint3_AllProperties = OB1_AllProperties
        End Sub
        Friend Sub SubContainer(Sender As Object)
            Call OB3_Control.SubControl(Sender)
        End Sub
    End Class
    
    Public Class CL3_Control
        Friend CLPoint3_AllProperties As CL_AllProperties
    
        Public Sub New(ByRef OB1_AllProperties As CL_AllProperties)
            CLPoint3_AllProperties = OB1_AllProperties
        End Sub
        Friend Sub SubControl(Sender As Object)
    
        End Sub
    End Class
    
    Public Class CL_AllProperties
        Public CheckContainerRowTypeEditForm As Boolean = False
        Public PageName As String
    End Class




    Samstag, 20. Februar 2021 17:10

Antworten

  • Hi Philippe,
    du solltest die Konstruktoren nicht in der Deklaration aufrufen. Wenn das System die Instanziierung nicht in der von dir erwarteten Reihenfolge ausführt, kann es zu NullReferenceException kommen. Zum Glück ist so etwas in C# nicht ohne Weiteres möglich. Zur Vermeidung solcher Nebeneffekte solltest du es wie in C# machen:

    Public Class CL2_Container
        Friend CLPoint2_AllProperties As CL_AllProperties
    
        Private OB3_Control As  CL3_Control ' nur Verweisvariable
    
        Public Sub New(ByRef OB1_AllProperties As CL_AllProperties)
            CLPoint2_AllProperties = OB1_AllProperties
    
    OB3_Control = New CL3_Control(CLPoint2_AllProperties) ' Instanz erzeugen und zuweisen, danach darauf zugriefen
    
            OB3_Control.CLPoint3_AllProperties = OB1_AllProperties
        End Sub
        Friend Sub SubContainer(Sender As Object)
            Call OB3_Control.SubControl(Sender)
        End Sub
    End Class


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    Samstag, 20. Februar 2021 18:42

Alle Antworten

  • Hi Philippe,
    du solltest die Konstruktoren nicht in der Deklaration aufrufen. Wenn das System die Instanziierung nicht in der von dir erwarteten Reihenfolge ausführt, kann es zu NullReferenceException kommen. Zum Glück ist so etwas in C# nicht ohne Weiteres möglich. Zur Vermeidung solcher Nebeneffekte solltest du es wie in C# machen:

    Public Class CL2_Container
        Friend CLPoint2_AllProperties As CL_AllProperties
    
        Private OB3_Control As  CL3_Control ' nur Verweisvariable
    
        Public Sub New(ByRef OB1_AllProperties As CL_AllProperties)
            CLPoint2_AllProperties = OB1_AllProperties
    
    OB3_Control = New CL3_Control(CLPoint2_AllProperties) ' Instanz erzeugen und zuweisen, danach darauf zugriefen
    
            OB3_Control.CLPoint3_AllProperties = OB1_AllProperties
        End Sub
        Friend Sub SubContainer(Sender As Object)
            Call OB3_Control.SubControl(Sender)
        End Sub
    End Class


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    Samstag, 20. Februar 2021 18:42
  • Hallo Peter

    Alles klar! Funktioniert.

    Vielen Dank.
    Gruss Philippe
    Samstag, 20. Februar 2021 19:02