an "in"通用参数do

本文关键字:quot 参数 do in an | 更新日期: 2023-09-27 18:02:24

今天看到这个签名了:

public interface ISomeInterface<in T>

in参数有什么影响?

an "in"通用参数do

您可以阅读。net 4.0中引入的泛型方差和逆变。in关键字对接口的影响是声明它为逆变,这意味着T只能作为输入法类型使用。不能将其用作此接口方法的返回类型。这样做的好处是,您将能够做这样的事情(如前面的文章所示):

interface IProcessor<in T>  
{  
    void Process(IEnumerable<T> ts);  
}
List<Giraffe> giraffes = new List<Giraffe> { new Giraffe() };  
List<Whale> whales = new List<Whale> { new Whale() };  
IProcessor<IAnimal> animalProc = new Processor<IAnimal>();  
IProcessor<Giraffe> giraffeProcessor = animalProc;  
IProcessor<Whale> whaleProcessor = animalProc;  
giraffeProcessor.Process(giraffes);  
whaleProcessor.Process(whales);  

表示泛型逆变。相反的是协方差(关键字out)。

这意味着当接口是逆变的(in)时,当类型参数继承t时,接口可以隐式地转换为泛型类型。

相反,对于协方差out,接口可以隐式转换为泛型类型,其中类型参数是类型层次结构中的"较小"类型。