Benutzer mit den meisten Antworten
Klasse an Klassen weitergeben

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
- Bearbeitet Stefan FalzModerator Samstag, 20. Februar 2021 17:14 Code als Code formatiert
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- Als Antwort vorgeschlagen Stefan FalzModerator Sonntag, 21. Februar 2021 07:31
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 4. März 2021 08:05
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- Als Antwort vorgeschlagen Stefan FalzModerator Sonntag, 21. Februar 2021 07:31
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 4. März 2021 08:05