2011-06-07 63 views
0

可能重复:
Method overloading in Objective-C?是方法重载不可能

是方法重载不可能的。 我有两个同名的函数。 当声明像下面我设置错误。

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

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

+0

我传递的参数的类型是不同的。为什么是错误。 – spandana 2011-06-07 11:02:39

+2

,因为方法重载不支持:)原因是参数类型不是方法签名的一部分在objective-c中。只有他们的名字重要。 – Vladimir 2011-06-07 11:06:03

+0

@Vladimir&Itai:谢谢你解释。 – spandana 2011-06-07 11:24:26

回答

3

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

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

这不会改变他们的类型签名,这是改变他们的名字。这就是整个观点 - 不支持使用相同名称的不同类型签名。 – 2011-06-07 12:11:22

+0

@Sherm Yeesh,对于这个明显的错误感到抱歉。你是对的!固定。 – 2011-06-07 19:20:11

+0

不用担心 - 尽管如此,这是一个很好的答案,而且我也不会因为输入错误而投票。 :-) – 2011-06-07 22:45:42