Domino 9 und frühere Versionen > ND8: Entwicklung

Kann sich eine Klasseinstanz selbst zerstören?

(1/3) > >>

khing:
Hallo,

im Moment stehe ich vor folgender Problematik. Ich erstelle eine neue Instanz meiner Klasse mit einem String als Parameter. Mit diesem String (UNID) hole ich mir ein Dokument, wo weitere Informationen drin stehen. Versehentlich habe ich nun die NoteID und nicht die UNID übergeben und bin in eine Endlosschleife rein gelaufen.  :-\ Komischerweise wirft Getdocumentbyunid gleich einen richtigen Error, sodass mein ErrorHandler anspringt....
So weit ist alles noch OK, weil auch das Delete der Instanz ausgeführt wird aber danach noch lange nicht das Objekt zerstört ist. Danach folgt der Aufruf einer Funktion dieser Instanz und nun hagelt es nur noch Fehler.  ::)

Sicherlich kann ich nun in den öffentlichen Funktionen Schutzmechanismen einbauen aber geht das nicht einfacher, dass ich z. B. diese Instanz einfach sich selbst zerstören lasse? Habt ihr da Lösungsansätze?

Gruß Kristian

pram:
Ein "delete me" funktioniert soweit ich weiß nicht, was aber geht ist

--- Code: ---dim this
set this = me
delete this

--- Ende Code ---
Danach ist die Klasse "zerstört" und es hagelt dann halt andere Fehler.

Meiner Meinung nach ist das aber auch keine optimale Lösung, ich denke dass dein ErrorHandler nicht korrekt ist. Wenn die Klasse nicht richtig initialisiert werden konnte, dann darf halt nicht weiter gemacht werden.

LG Roland

khing:
Hallo Roland,

perfekt! Das ist es, was ich gesucht habe. "Delete Me" hatte ich auch schon probiert und das ging nicht.
Mein Problem ist anscheinend, dass ich noch in Sub New bin und dort mein Errorhandler nicht aussteigt.

Gruß Kristian

Tode:
Dann solltest Du aber dringend Deinen ErrorHandler überarbeiten. Ein sauberer ErrorHandler gibt an die übergeordnete Funktion zurück: "He, da ist ein Fehler passiert"... Egal wie er das tut, aber danach weiss die "Calling Sub", dass sie nicht weitermachen muss, oder eben Ihrerseits den aufgetretenen Fehler handeln... oder eben auch wieder nach oben durchreichen...

khing:
Ja, da liegt anscheinend mein Problem. Ich hatte schon die ganze Zeit so meine Vermutung, dass der nicht richtig arbeitet.

Ich habe eine eigene ErrorHandler-Klasse, die an die aktuellen Klasse "MailMonitor" vererbt wird. In der Klasse MailMonitor habe ich die Sub "logError" der ErrorHandler-Klasse überschrieben (damit ich ein Errorlogging im MailMonitor noch schreiben kann) und erst zum Ende rufe ich "Call Basis..logError(Errorstring)" auf.

Also vereinfacht so:

--- Code: ---Public Class ErrorHandler
...
   Public Sub logError(Errorstring)
       'Verarbeitet hier grundlegende Fehler
   End Sub
...
End Class

Public Class Basis As ErrorHandler
...
End Class

Public Class MailMonitor As Basis

   Private Sub logError(ErrorString)
      'Schreibe Infos für MailMonitor weg
      ...
      'Aufruf der Sub aus Mutterklasse
      Call Basis..logError(Errorstring)
   End Sub

End Class

--- Ende Code ---

Kann das daran liegen? Es geht auch Call Errorhandler..logError(Errorstring) und da bin ich mir nicht sicher  :-\

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln