C# 为什么可以';分配谓词<;T>;对谓词<;对象>;什么时候T是从对象派生的?
标题说明一切。如果我有一块地C# 为什么可以';分配谓词<;T>;对谓词<;对象>;什么时候T是从对象派生的?,c#,delegates,C#,Delegates,标题说明一切。如果我有一块地 private Predicate<object> myPredicate; 私有谓词myPredicate; 为什么我不能分配一个 Predicate<T> 谓词 那个领域的实例 因为实现了逆变。所以你可以 Predicate<string> predString; Predicate<object> predObject = (object x) => x != null; predString
private Predicate<object> myPredicate;
私有谓词myPredicate;
为什么我不能分配一个
Predicate<T>
谓词
那个领域的实例 因为实现了逆变。所以你可以
Predicate<string> predString;
Predicate<object> predObject = (object x) => x != null;
predString = predObject;
“Foo”
是predObject
(接受对象
)的有效参数(字符串)
反之则不行:
非法代码
Predicate<object> predObject;
Predicate<string> predString = (string x) => x.Length != 0;
predObject = predString;
显然
newobject()
是predString
的非法参数(需要string
参数) 协变和逆变,我认为谓词
实现逆变,因为否则你可以用一些不是T的东西来调用你的T谓词
Predicate<object> predObject;
Predicate<string> predString = (string x) => x.Length != 0;
predObject = predString;
bool result = predObject(new object());