我只是偶然发现了一个非常有趣的问题.提供以下代码:
using System;
class Program
{
class A { }
class B : A { }
private static void MyMethod(A a) /* first method */
{
Console.WriteLine("A"); ;
}
private static void MyMethod(B b) /* second method */
{
Console.WriteLine("B");
}
static void Main(string[] args)
{
var a = new A();
// Call first method
MyMethod(a);
A b = new B();
// Should call the second method
MyMethod(b);
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
我希望第二个方法将被调用,因为变量的运行时类型是B.任何想法为什么代码调用第一个方法而不是?
谢谢,蒂比
一些澄清:多态性意味着在声明方法时无关的几种形式.
方法重载是多态,ad-hoc多态的一种形式.
多态性的方式通常通过使用后期绑定来实现.
dynamic是此问题的解决方法.
事实是,这不是在C#(或Java)中工作,它是一个设计决定,我想理解为什么这样做,并且没有一个答案回答这个问题.
/提笔