我有以下类层次结构:
class A {
/// stuff
}
class B : A {
/// stuff
}
class C<T> : B {
/// stuff
}
Run Code Online (Sandbox Code Playgroud)
然后在某个地方完全不同我有以下三种方法:
public void foo(A a) {
}
// overload 1
public void bar(B b) {
}
// overload 2
public void bar<T>(C<T> ct) {
}
Run Code Online (Sandbox Code Playgroud)
现在,无论出于何种原因,我需要在给定A的实际类型的情况下从foo调用"正确"栏.也就是说,如果A实际上是B类,我需要调用重载1并且如果A实际上是类型C(无论T是什么),我需要调用重载2.为了完整性,如果A不是B或C,则什么都不做.
现在,我正在使用Type类的IsAssignableFrom方法来决定是否可以向上转换为B:
public void foo(A a) {
if (typeof(B).IsAssignableFrom(a)) {
bar((B)a);
}
}
Run Code Online (Sandbox Code Playgroud)
但这也需要C变体.所以问题是,我该如何执行此向上播放?反射?动力学?我们使用的是.NET 4,所以在C#5中引入的任何内容都是我无法使用的.