2012-12-08 13 views

Antwort

17

gebaut Um zu testen, ob anObject Instanz aClass von:

(anObject isMemberOf: aClass) 

Um zu testen, ob es sich um eine Instanz von aClass oder eines davon Unterklassen ist:

(anObject isKindOf: aClass) 
5

Sie haben Recht, verwenden Sie für die genaue Klasse zu überprüfen (unter Verwendung von Identität statt):

Instanzklasse == Someclass ifTrue: []

Wert auch isKindOf: ist, der prüft, ob Instanz ist eine Klasse oder Unterklasse von bestimmten Klasse:

(Beispiel IsKindOf: Someclass) ifTrue []

Netteste und eleganteste ist ein Testverfahren in übergeordnete Klasse und Peer-Klassen zu schreiben, dann verwenden, wie:

Instanz isSomeClass ifTrue []

+1

Netteste und eleganteste ist nicht zu fragen , sagen Sie, zB: statt: Objekt isSomething ifTrue: [etwas tun] verwenden: Objekt DoSomething –

+2

Ich stimme Igor. Darüber hinaus ist "am schönsten und elegantesten" im Auge des Betrachters. Was istinteger und friends tun, ist definitiv * schneller *, da es sich um eine einzelne Nachricht handelt, die sofort true/false versus isKindOf: zurückgibt, die die Klassenhierarchie durchlaufen muss. Der Nachteil für einige Leute ist, dass Sie eine Object-Methode, die false zurückgibt, eine isSomeClass-Methode hinzufügen müssen. –

Verwandte Themen