class Program { static void Main(string[] args) { List<A> myList = new List<A> {new A(),new B(),new C()}; foreach (var a in myList) { Render(a); } Console.ReadKey(); } private static void Render(A o) { Console.Write("A"); } private static void Render(B b) { Console.Write("B"); } private static void Render(C c) { Console.Write("C"); } } class A { } class B : A { } class C : A { }
输出为:AAA
解决方法
如果您使用C#4,您可以使用动态输入:
foreach (dynamic a in myList) { Render(a); }
在静态打字中,重载分辨率在编译时执行,而不是执行时.
为了在决策时间选择实现,您必须使用覆盖而不是重载,或者使用如上所述的动态类型.