我有一堆方法,我想检查其中的一些元数据,它们都有不同的参数,但是这些参数都是从BaseClass
派生的。
public void CheckMethod(Func<BaseClass, Object> func)
{
// Check method metadata here
}
public Object MethodToCheck(DerivedClass foo)
{
// Whatever...
}
public void Test()
{
CheckMethod(MethodToCheck);
}
代码在
CheckMetadata(MethodToCheck)
上失败,因为MethodToCheck将DerivedClass作为参数而不是BaseClass。我试过使用泛型:public void CheckMethod<T>(Func<T, Object> func)
...
CheckMethod<DerivedClass>(MethodToCheck);
我希望对CheckMethod的调用尽可能少键入,并且希望仅使用
CheckMethod(MethodToCheck)
进行调用。这可能吗? 最佳答案
Check out the MSDN page on covariance and contravariance。本文似乎建议您不能在以前的版本中实现此目的。
如果您使用的是旧版本,建议您探索访问者模式。
关于c# - 使用基类作为参数的Func <>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5949353/