Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 它将使用哪种重载方法?_C#_Polymorphism_Overloading - Fatal编程技术网

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,我现在的问题是解决这个问题,你能帮我看一下吗?