Fragensteller
Code ausführen beim Initialisieren einer Klasse

Allgemeine Diskussion
-
Hallo Spezialisten und Profis,
ich suche nach einer Methode, Funktion, oder sonsitegen Forgehensweise wie ich einen Code beim ersten Initialisieren einer Klasse ausführen kann nach dem der Konstruktor durchgelaufen ist. Ähnlich wie der Event Load bei einer WindowsForm.
Ich möchte z.B. einen bestimmten Code ausführen der immer ausgeführt wirdl, egal welcher Konstruktor verwendet wird, das bedeutet das ich diesen auf keinen Falll in einem Konstruktor (New()) reinschreiben möchte da ich ja mehere Konstruktoren (ich hoffe das ist ein deutsches Wort :-) ) haben kann
Natürlich kann ich ich eine Methode oder Sub am Schluss jedes Konstruktors ausführen lassen, doch ich habe etwas in Erinnerung das es den Weg wie ich ihn (hoffentlich versändlich) beschrieben habe auch gibt.
Hier zwei Varianten, wobei die zweite die ist die ich vermeiden möchte.
Variante1
Public Class Class1 ''' <summary> ''' Konstruktor 1 ''' </summary> Public Sub New() 'irgend ein Code ... End Sub ''' <summary> ''' Konstruktor 2 ''' </summary> Public Sub New() 'irgend ein anderer Code ... End Sub Public Sub Init() 'dieser Code soll ausfeführt werden nachdem der gewünschte Konstruktor gestartet wurde End Sub End Class
Variante2
Public Class Class1 ''' <summary> ''' Konstruktor 1 ''' </summary> Public Sub New() 'irgend ein Code ... Init() End Sub ''' <summary> ''' Konstruktor 2 ''' </summary> Public Sub New() 'irgend ein anderer Code ... Init() End Sub Public Sub Init() 'dieser Code soll ausfeführt werden nachdem der gewünschte Konstruktor gestartet wurde End Sub End Class
Vielen Dank im Voraus
Bitte klärt mich über falsche Fachbegriffe auf Beste Grüße Florian Reiter
- Typ geändert Ionut DumaModerator Dienstag, 29. Oktober 2013 16:42 Keine Rueckmeldung des Fragenstellender
Alle Antworten
-
Hi Florian,
was du Suchst gibt es meines Wissens nicht.
Ich weiß jetzt nicht genau was du machen willst, aber wenn es darum geht "Komplexere" Objekte zu erzeugen kann man z.B. das Factory Pattern oder das Builder Pattern verwenden.
MFG
Björn
-
Hallo Björn,
was ich damit erreich will ich einen Bestimmten Code immer nach dem Ausführen eines Bliebigen Konstruktors ausführen kann, egal welcher Konstruktor ausgeführt wurde.
Bitte klärt mich über falsche Fachbegriffe auf Beste Grüße Florian Reiter
-
Das ist nur ein Fiktives Beispiel.
Danach soll eine Table mit Collums gefüllt werden und ein paar Sachen in Logfiles geschrieben werden, ich kann das zwar in eine Sub geben und diese bei jedem Konstruktor ausführen, ich bin aber eine Person die gerne alles wissen will.
Bitte klärt mich über falsche Fachbegriffe auf Beste Grüße Florian Reiter
- Bearbeitet Florian.Reiter Mittwoch, 2. Oktober 2013 13:06
-
Hallo Björn,
ich weiß nicht von welcher Tabelle du redest (vielleicht ein Datagrid) aber ich meine die system.data.datatable (http://msdn.microsoft.com/de-de/library/system.data.datatable.aspx), ich habe die noch nie als UserControl verwendet und hätte auch keinen Plan wie ich das anstellen soll.
Wie gesagt ich möchte einen Code nach einem Konstruktor ausführen der immer gleich ist und deswegen diesen nicht in eine Sub packen und die erstellte Sub bei jedem Konstruktor ausführen.
Bitte klärt mich über falsche Fachbegriffe auf Beste Grüße Florian Reiter
-
Hi Florian,
ja ich hatte da wirklich an ein Datagrid gedacht.
Wie gesagt was du möchtest geht so nicht direkt.
Wenn du die Pattern nicht verwenden möchtest, würden mir noch 2 Möglichkeiten einfallen.
Einmal die Trivial Lösung und Konstruktor Chaning verwenden. Hier mal der C# Ansatz und hier eine Möglichkeit es in VB umzusetzen.
2. Eine Abstrakte Basis Klasse deren Konstruktor die Methode aufruft. Das könnte wie folgt aussehen.
Public MustInherit Class SelfInitingKlasss Public Sub New() Init() End Sub Protected MustOverride Sub Init() End Class Public Class TestKlasse : Inherits SelfInitingKlasss Public _Name As String = GetName() Public Sub New() Dim test As String = "Name" End Sub Public Sub New(ByVal Name As String) _Name = Name End Sub Protected Overrides Sub Init() _Name = "Test" End Sub Private Function GetName() As String Return "GetName" End Function End Class
Da bei ist aber genau zu beachten in welcher Reihenfolge die Klassen Initalisiert werden und welche Methoden wann aufgerufen werden.
Da Init von der Basis Klasse aufgerufen wird wird es vor den Konstruktor der Abgleiteten Klasse aufgerufen.
also also erst Init und an GetName und dann der Code der im Konstruktor steht. Am besten mal in Debugger anschauen.
Meiner Meinung nach nicht wirklich eine gute Lösung.
MFG
Björn
-
**************************************************************************************************
Dieser Thread wurde mangels weiterer Beteiligung des Fragestellenden ohne bestätigte Lösung abgeschlossen.
Neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.
**************************************************************************************************Ionut Duma, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip„Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.