【问题标题】:Is method overloading not possible [duplicate]方法重载是不可能的[重复]
【发布时间】:2011-06-07 10:53:04
【问题描述】:

可能重复:
Method overloading in Objective-C?

方法重载是不可能的。 我有两个同名的函数。 当像下面这样声明时,我会出错。

-(RS232Msg*)CreateMessage:(REMOTE_MESSAGE_ID) nMessageNumber;
-(RS232Msg*)CreateMessage:(const uint8_t*) szMessageName;

当声明 -(RS232Msg*)CreateMessage:(const uint8_t*) szMessageName; 时,我没有收到任何错误。 我也有两个具有不同返回类型和参数的同名函数。但是它工作正常并且它的声明中没有错误。 为什么会这样?

【问题讨论】:

  • 我传递的参数类型不同。为什么会出错。
  • 因为不支持方法重载 :) 原因是参数类型不是 Objective-c 中方法签名的一部分。只有他们的名字很重要。
  • @Vladimir & Itai:谢谢你的解释。

标签: objective-c


【解决方案1】:

不,方法重载在 C 中是不可能的,因此在 Objective-C 中是不可能的(因为 Objective-C 是 C 的超集)。如果您想使用这两种方法,则必须更改它们的名称。我建议如下:

- (RS232Msg *)createMessageWithMessageID:(REMOTE_MESSAGE_ID)nMessageNumber;
- (RS232Msg *)createMessageWithName:(const uint8_t*)szMessageName;

【讨论】:

  • 这不是改变他们的类型签名,而是改变他们的名字。这就是重点 - 不支持具有相同名称的不同类型签名。
  • @Sherm Yeesh,很抱歉这个明显的错误。你说得对!固定。
  • 不用担心——尽管如此,这是一个很好的答案,而且我不会因为拼写错误而放弃投票。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-31
  • 1970-01-01
相关资源
最近更新 更多