簡體   English   中英

Objective-C方法重載

[英]Objective-C Method Overloading

我對Objective-C方法重載有疑問。 Java支持使用相同名稱的方法重載,不同類型的相同數量的參數 但是當我嘗試在Objective-C中做類似的聲明時,它會拋出錯誤重復聲明方法 考慮以下代碼,

/* Java */

int add(int i, int j);
int add(int i, int j, int k); // Accepted
float add(float i, float j); // Accepted

/* Objective-C */

- (int)add:(int)i and:(int)j;
- (int)add:(int)i and:(int)j and:(int)k; // Accepted
- (float)add:(float)i and:(float)j; // Throws error

為什么Objective-C不支持這個? 有替代方案嗎?

Objective-C不支持它。 普通的舊C不支持它,因此Objective-C同樣沒有添加方法重載也不足為奇。 為清楚起見,這有時可能是好的。 通常,解決此問題的方法是在函數名稱中包含有關參數的一些信息。 例如:

- (int) addInt:(int)i toInt:(int)j;
- (int) addInt:(int)i toInt:(int)j andInt:(int)k;
- (float) addFloat:(float)i toFloat:(float)j;

從這開始:

- (int)add:(int)i and:(int)j;

這不會覆蓋任何東西 - 它只是另一種方法:

- (int)add:(int)i and:(int)j and:(int)k; // Accepted

以下內容未被特別接受,因為Objective-C不允許共變反變方法聲明。 Objective-C也沒有基於類型的調度重載Java和C ++。

- (float)add:(float)i and:(float)j; // Throws error

請注意,Java是直接從Objective-C派生的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM