使用基类作为参数的Func <>

Pet*_*erg 8 c#

我有一堆方法,我想检查一些元数据,所有这些方法都有不同的参数但参数都来自BaseClass.

public void CheckMethod(Func<BaseClass, Object> func)
{
    // Check method metadata here
}

public Object MethodToCheck(DerivedClass foo)
{
    // Whatever...
}

public void Test()
{
    CheckMethod(MethodToCheck);
}
Run Code Online (Sandbox Code Playgroud)

代码失败CheckMetadata(MethodToCheck),因为MethodToCheck将DerivedClass作为参数而不是BaseClass.我尝试过使用泛型:

public void CheckMethod<T>(Func<T, Object> func)

...

CheckMethod<DerivedClass>(MethodToCheck);
Run Code Online (Sandbox Code Playgroud)

我希望CheckMethod的调用尽可能少,并且更愿意只调用它CheckMethod(MethodToCheck).这可能吗?

Apo*_*sia 2

查看有关协变和逆变的 MSDN 页面。该文章似乎表明您无法在以前的版本中实现这一点。

如果您坚持使用旧版本,我建议您探索访客模式。