C# 语言变量委托

示例

代表可能具有变量类型参数。

delegate void Action<in T>(T t);    // T是输入
delegate T Func<out T>();           // T是输出
delegate T2 Func<in T1, out T2>();  // T1是输入,T2是输出

这源于《里斯科夫替代原理》,该原理指出(除其他事项外)在以下情况下,方法D的方法比方法B的方法更易推导:

  • D具有比B相同或更多的派生返回类型

  • D具有比B相同或更多的通用对应参数类型

因此,以下分配都是类型安全的:

Func<object, string> original = SomeMethod;
Func<object, object> d1 = original;
Func<string, string> d2 = original;
Func<string, object> d3 = original;