2009-06-23 21 views
13

Assumere una classe Veicolo ha un metodo chiamato "StartEngine", e nella mia sottoclasse chiamata "Aereo" voglio sovrascrivere "StartEngine". Se utilizzo C#, dovrei usare la parola chiave "override" nella dichiarazione/definizione del metodo StartEngine di Airplane.Equivalente Objective-C di "override" in C#

La ragione per cui sto chiedendo è che se invece di "StartEngine" scrivo "startengine", C# si lamenterà, ma Objective-C non lo farà, grazie a quella parola chiave.

risposta

15

Tutti i metodi di classe e istanza in Objective-C sono spediti in modo dinamico e può essere sottoposto a override in sottoclassi. Non c'è niente come la parola chiave override del C#, o come la sua parola chiave virtual.

+0

Questo ha senso .. Ho appena scoperto che cos'è un metodo in ogg-c: un puntatore alla funzione effettiva un nome e una codifica ... Niente di più. –

+0

E 'quindi anche polimorfico? – Henri

+0

Tutti i metodi in Objective-C sono polimorfici, compresi i metodi di classe. (Questo è diverso dai metodi "statici" in C#, Java e C++, che non sono polimorfi.) –

11

Sì, è sicuramente possibile. Non c'è però una parola chiave override. Basta dichiarare una funzione con una firma identica nella sottoclasse e verrà chiamata al posto della versione delle superclassi.

Ecco cosa metodo startEngine di aereo potrebbe essere simile:

- (void)startEngine 
{ 
    // custom code 

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

Ho appena chiarito la domanda. So che l'override è possibile nell'obiettivo-c, voglio solo che il compilatore verifichi che in realtà sto ignorando un metodo e non ne creo uno nuovo nella sottoclasse. –

+0

Ahh - Capisco. Sfortunatamente, il compilatore Objective-C non fornisce alcun modo per farlo. Diamine - anche chiamare una funzione che non esiste è solo un avvertimento! :-) Penso che la cosa migliore da fare in questo caso sarebbe rendere le implementazioni del metodo della classe base astratta lanciare NSExceptions. –

2

Tutti i metodi in Objective-C sono sovrascrivibili, basta scrivere un metodo per la stessa firma.