我只是偶然發現了一個非常有趣的問題。給下面的代碼:多態方法不適用於C#4
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();
}
}
我會想到的是,第二個方法將被調用,因爲變量的運行時類型爲B.任何想法,爲什麼代碼調用第一種方法呢?
感謝, 提筆
一些澄清:多態性是指無關,你聲明的方法幾種形式。
方法重載是多態的一種形式,ad-hoc多態。
通常使用遲綁定來實現多態的方式。
動態是解決此問題的方法。
事實上,這不是在C#(或Java)中工作,它是一個設計決定,我想知道爲什麼做了,沒有答案回答這個問題。
/Tibi
這不是多態,你有兩個相同方法的重載實例,每個實例都以不同的類型作爲參數。然後你聲明「b」爲A.編譯器讓你這樣做,因爲B繼承了A. – Maess