考虑以下代码:
class MyClass
{
}
class MyClass2 : MyClass
{
}
private void Foo(MyClass cl)
{
//cl is actually MyClass2 instance
TestGeneric(cl);
}
private void TestGeneric<T>(T val)
{
//do smth
}
调用 Foo()之后,TestGeneric中的T是 MyClass ,而不是 MyClass2 。
如何实现将val视为 MyClass2 实例?
提前致谢。
更新:
我实际上不知道该对象是使用 MyClass2 ctor创建的,而是可以通过调用val.GetType()来推断出这一点,所以像 MyClass2 这样的简单对象将无法正常工作
最佳答案
假设您可以更改Foo
,但不能更改其签名,则可以执行以下操作:
private void Foo(MyClass cl)
{
TestGeneric((dynamic)cl);
}
这将解决在运行时而不是在编译时调用的
TestGeneric
的版本,当TestGeneric<MyClass2>
是该类型时调用cl
。