2009-06-23 14 views
13

Angenommen, eine Klasse Vehicle hat eine Methode namens "StartEngine" und in meiner Unterklasse "Airplane" möchte ich "StartEngine" überschreiben. Wenn ich C# verwende, sollte ich das Schlüsselwort "override" in der StartEngine-Methode verwenden.Objective-C-Äquivalent von "override" in C#

Der Grund, warum ich frage, ist, dass, wenn statt "StartEngine" ich "startengine" eintippe, C# wird sich beschweren, aber Objective-C wird nicht, dank dieses Schlüsselworts.

Antwort

15

Alle Klassen- und Instanzmethoden in Objective-C versandt werden dynamisch und können in Unterklassen überschrieben werden. Es gibt nichts wie C# 's override Schlüsselwort oder wie sein virtual Schlüsselwort.

+0

Das macht Sinn .. Ich habe gerade gelernt, was eine Methode in objective-c ist: ein Zeiger auf die eigentliche Funktion ein Name und eine Codierung ... Nichts extra. –

+0

Ist es dann auch polymorph? – Henri

+0

Alle Methoden in Objective-C sind polymorph, einschließlich Klassenmethoden. (Dies ist anders als "statische" Methoden in C#, Java und C++, die nicht polymorph sind.) –

11

Ja - es ist definitiv möglich. Es gibt jedoch kein Override-Schlüsselwort. Erklären Sie einfach eine Funktion mit einer identischen Signatur in Ihrer Unterklasse und sie wird anstelle der Oberklassenversion aufgerufen.

Hier ist, was Airplanes startEngine Methode aussehen könnte:

- (void)startEngine 
{ 
    // custom code 

    // call through to parent class implementation, if you want 
    [super startEngine]; 
} 
+2

Ich habe gerade die Frage geklärt. Ich weiß, dass das Überschreiben in objective-c möglich ist. Ich möchte nur, dass der Compiler überprüft, dass ich eine Methode überschreibe und keine neue in der Unterklasse erstelle. –

+0

Ahh - ich verstehe. Leider bietet der Objective-C-Compiler keine Möglichkeit, dies zu tun. Verdammt - sogar eine Funktion zu rufen, die nicht existiert, ist nur eine Warnung! :-) Ich denke, Ihre beste Wette in diesem Fall wäre, die Methodenimplementierungen der abstrakten Basisklasse NSExceptions zu werfen. –

2

Alle Methoden in Objective-C sind außer Kraft gesetzt, Sie schreiben nur eine Methode für die gleiche Signatur.