C# 它将使用哪种重载方法?
例如我们有C# 它将使用哪种重载方法?,c#,polymorphism,overloading,C#,Polymorphism,Overloading,例如我们有 BaseClass myBaseObject InheritedClass myInheritedObject 和2个重载方法 void Do(BaseClass tmp) { DoA();} void Do(InheritedClass tmp) { DoB();} 这会怎么样 Do((BaseClass) myInheritedObject); 将DoA()放在BaseClass下,将DoB(
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()}
第一个-第二个重载不适用,因为参数的编译时类型是
BaseClass
,而不是InheritedClass
,并且没有从BaseClass
到InheritedClass第一个重载的隐式转换,因为参数的类型完全对应于它的签名为什么要问什么时候你可以在你的编译器中检查你自己,而你写这个问题需要的时间是一样的?一种方法是在一个快速控制台应用程序中自己检查它…@OferZelig:用一个快速控制台应用程序检查会给他答案,但答案会告诉他原因。“理解比仅仅知道要好,不是吗?”法兰威你说得对,如果这是他要求的。他问“这会做什么?”而不是“为什么会调用第一个方法?”这是Jon Skeet阐述的绝对合理的答案。这不仅仅是语义上的问题,这家伙实际上并没有亲自尝试,也不知道答案是什么,而是问发生了什么,而不是为什么会发生某些结果。Do(myInheritedObject)会调用DoB()?@colinfang:是的,假设myInheritedObject
的编译时类型是InheritedClass
。当然,你自己也可以很容易地试一下。thx,我现在的问题是解决这个问题,你能帮我看一下吗?