2012-03-27 69 views
0

例如,我们有它会使用哪种重载方法?

 BaseClass myBaseObject 
    InheritedClass myInheritedObject 

和2重载方法

 void Do(BaseClass tmp) 
     { DoA();} 
    void Do(InheritedClass tmp) 
     { DoB();} 

什么会这样呢?

 Do((BaseClass) myInheritedObject); 

,是其常用的方法把DoA()BaseClass之下,DoB()InheritedClass下并覆盖DoA(),并合并2 Do()为1?

 void Do(BaseClass tmp) 
      {return tmp.DoA()} 
+0

因为参数类型完全对应于它的签名 – 2012-03-27 11:47:14

+2

为什么问你什么时候可以在你的编译器中检查自己,在相同的时间内写出这个问题? – 2012-03-27 11:47:20

+0

这是一个谜语还是一个问题? – 2012-03-27 11:47:48

回答

2

第一 - 第二过载是不适用的,因为自变量的编译时类型是BaseClass代替InheritedClass,而且也没有隐式转换从BaseClassInheritedClass

+0

所以Do(myInheritedObject)会调用DoB()? – colinfang 2012-03-27 11:53:58

+0

@colinfang:是的,假设'myInheritedObject'的*编译时类型*是'InheritedClass'。当然,你可以很容易地尝试这个。 – 2012-03-27 11:55:35

+0

thx,我的问题现在成为解决这个问题,你可以帮忙看一下吗? http://stackoverflow.com/questions/9892660/how-to-improve-this-method-using-polymorphismoverloading-so-as-to-reduce-is-ty – colinfang 2012-03-27 17:02:19