我有以下类层次结构:
class A {
/// stuff
}
class B : A {
/// stuff
}
class C<T> : B {
/// stuff
}
然后,在完全不同的地方,我有以下三种方法:
public void foo(A a) {
}
// overload 1
public void bar(B b) {
}
// overload 2
public void bar<T>(C<T> ct) {
}
现在,无论出于何种原因,在给定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);
}
}
但这也包含C变体。因此,问题是,我该如何执行上流?反射?动力学?我们正在使用.NET 4,因此C#5中引入的任何内容都无法使用。
最佳答案
使用dynamic
。它将使方法解析在运行时而不是在编译时发生,因此您将获得最适合实际实例类型的方法。
bar((dynamic)value);
关于c# - 转换为通用类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21294240/