日期:2014-05-18  浏览次数:20991 次

用什么方法可以实时的把基类转换成子类
class Base
class A : Base

fn(Base A)
fn(A a)

Base base = new A();
fn(base); //调用的是fn(Base A)

怎么让它调用fn(A a)
不要if或者switch的

------解决方案--------------------
override,virtual.....
------解决方案--------------------
在你这种设计下,判断是无法避免的,因为设计时无法明确知道需要调用哪个重载
------解决方案--------------------
用泛型吧 fun<T>(T A) where T:Base
fun<A>(A)
fun<An>(A)
------解决方案--------------------
LZ需要的,是运行时的重载决策。在没有实现DLR的C# 3.5,只能用反射。
但是既然需要运行时的多态,为什么不考虑3L的方案——重写?
在基类中定义虚方法fn,然后各子类重写这个方法就好了嘛。