在Objective-C中的功能超载



c专家根据我的理解Objective-C是一种动态的绑定语言,不允许在类中超载任何方法。

,但是如果我写两个具有相同名称的方法,但一件事使我感到恼火,但不同数量的参数列表如下:

 // Which is not allowed in objective-c
 -(void)updateValue:(int)intVal{
  } 
 -(void)updateValue:(float)floatVal{
  }

但是,允许的第二种情况是:

 // Allowed in Objective-C
 -(void)updateValue:(int)intVal{
   }
 -(void)updateValue:(float)floatVal :(int)intVal{
   }

尽管两种情况都是方法过载。

现在我的问题是为什么允许第二种情况。

在第二种情况下使用两个参数的方法更改方法名称?还是其他?

请解释。

在第二种情况下使用两个参数的方法更改方法名称?

是。方法名称是其所有参数前缀(包括结肠)的化合物。因此,您的两种方法是updateValue:updateValue::

hth

-(void)updateValue:(int)intVal
  {
  } 
 -(void)updateValue:(float)floatVal
  {
  }

这是不允许的,因为当用户调用带有参数的用户调用updateValue时,由于类型铸造值可以更改,并且显示了模棱两可的方法。

 -(void)updateValue:(int)intVal
   {
   }
  -(void)updateValue:(float)floatVal :(int)intVal
  {
  }

是因为参数计数是不同的,因此编译器知道要调用哪种方法,而当歧义方法调用不是其

最新更新