我有一堆方法,我想检查其中的一些元数据,它们都有不同的参数,但是这些参数都是从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/

10-13 08:14