= Operator überladen / Vergleich auf Nothing

23/04/2009 - 23:51 von Andreas Müller | Report spam
Hallo,

Habe eine Klasse erstellt, deren Objekte ich gerne vergleichen möchte. Dazu
habe ich die Operatoren = und <> überladen. Ein Problem sehe ich nur darin
weil ich in einer zweiten Klasse eine Eingenschaft .Owner habe, die
ebenfalls vom Typ cPlayer ist. Konkret kommt es also zu folgender Abfrage:

If Class2.Owner = Nothing Then

Für diesen Fall soll der Vergleich ja True ergeben, falls aber auf der
rechten Seite ein noch nicht initialisiertes Objekt steht, etwa bei

If Class2.Owner = MycPlayer Then

dann sollte der Vergleich (wenn MycPlayer Nothing liefert) in diesem Fall
False liefern.

Momentan habe ich das folgendermaßen gelöst, aber ich weiß nicht wie ich den
zweiten Fall abdecken kann:

Shared Operator =(ByVal cPlayer1 As cPlayer, ByVal cPlayer2 As cPlayer)
As Boolean
If cPlayer2 Is Nothing Then Return True
Return cPlayer1.m_Name = cPlayer2.m_Name
End Operator

Shared Operator <>(ByVal cPlayer1 As cPlayer, ByVal cPlayer2 As cPlayer)
As Boolean
Return Not cPlayer1.m_Name = cPlayer2.m_Name
End Operator

Gruß,

Andreas
 

Lesen sie die antworten

#1 Armin Zingler
24/04/2009 - 00:58 | Warnen spam
Andreas Müller wrote:
Hallo,

Habe eine Klasse erstellt, deren Objekte ich gerne vergleichen
möchte. Dazu habe ich die Operatoren = und <> überladen. Ein Problem
sehe ich nur darin weil ich in einer zweiten Klasse eine Eingenschaft
.Owner habe, die ebenfalls vom Typ cPlayer ist.



Zweite Klasse? Ebenfalls? Owner? Versteh ich net.

Konkret kommt es also
zu folgender Abfrage:
If Class2.Owner = Nothing Then

Für diesen Fall soll der Vergleich ja True ergeben,



Welchen Wert hat denn Class2.Owner? Ist Class2 der Typ?

falls aber auf der
rechten Seite ein noch nicht initialisiertes Objekt steht, etwa bei



Was ist ein noch nicht initialisiertes Objekt? Das gibt es m.E. nur vor dem
Ende der Ausführung des Constructors.

If Class2.Owner = MycPlayer Then

dann sollte der Vergleich (wenn MycPlayer Nothing liefert) in diesem
Fall False liefern.

Momentan habe ich das folgendermaßen gelöst, aber ich weiß nicht wie
ich den zweiten Fall abdecken kann:

Shared Operator =(ByVal cPlayer1 As cPlayer, ByVal cPlayer2 As
cPlayer) As Boolean
If cPlayer2 Is Nothing Then Return True
Return cPlayer1.m_Name = cPlayer2.m_Name
End Operator

Shared Operator <>(ByVal cPlayer1 As cPlayer, ByVal cPlayer2 As
cPlayer) As Boolean
Return Not cPlayer1.m_Name = cPlayer2.m_Name
End Operator



Sorry, verstehe ich nicht. Was hat nun welchen Wert und wann willst du
welches Ergebnis haben?


Armin

Ähnliche fragen