C# “一个”是什么意思;在;通用参数是什么?

C# “一个”是什么意思;在;通用参数是什么?,c#,generics,C#,Generics,今天看到这个签名: 公共接口接口 参数中的有什么影响?您可以阅读.NET 4.0中引入的泛型。关键字中的对界面的影响是它将其声明为逆变,这意味着T只能用作输入法类型。不能将其用作此接口方法的返回类型。这样做的好处是,您将能够做类似的事情(如上述文章所示): 接口i处理器 { 空洞过程(IEnumerable ts); } 列表长颈鹿=新列表{new Giraffe()}; 列表鲸鱼=新列表{new Whale()}; IPProcessor animalProc=新处理器(); i处理器长颈

今天看到这个签名:

公共接口接口


参数中的
有什么影响?

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

接口i处理器
{  
空洞过程(IEnumerable ts);
}
列表长颈鹿=新列表{new Giraffe()};
列表鲸鱼=新列表{new Whale()};
IPProcessor animalProc=新处理器();
i处理器长颈鹿处理器=animalProc;
i处理器WhalProcessor=animalProc;
长颈鹿处理器。进程(长颈鹿);
whaleProcessor.过程(鲸鱼);

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

接口i处理器
{  
空洞过程(IEnumerable ts);
}
列表长颈鹿=新列表{new Giraffe()};
列表鲸鱼=新列表{new Whale()};
IPProcessor animalProc=新处理器();
i处理器长颈鹿处理器=animalProc;
i处理器WhalProcessor=animalProc;
长颈鹿处理器。进程(长颈鹿);
whaleProcessor.过程(鲸鱼);

,表示一般性矛盾。相反的是协方差(关键字
out

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


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

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

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


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

它不是泛型约束
out
in
用于将通用参数标记为co-/contra variant。我认为这意味着当一个类实现该接口时,例如
class a:ISomeInterface
和另一个class子类B。然后查看LHS(左侧)、赋值(即静态类型侧)和RHS的接口,除了通常的同时生成Ts之外,您还可以使Ts不同,因为您可以使动态的Ts成为超类。所以你可以说,
ISomeInterface SomeIntWithB=new MyClass()我还没有亲自尝试过,这是我从Schildt C#Ch18收集到的。P558559他还提到了与代表的协方差和逆变,没有泛型。正如人们提到的,“in”是相反的。与泛型一起使用的“out”是协方差。“out”一词的用法也与out vs ref意义上的泛型无关,而in vs out则与泛型有关。协方差和逆方差也可以在没有泛型的情况下发生,在Schildt c#4.0 ch15中提到的没有泛型的委托的情况下,但仍然适用于当前的c#。它不是泛型约束
out
in
用于将通用参数标记为co-/contra variant。我认为这意味着当一个类实现该接口时,例如
class a:ISomeInterface
和另一个class子类B。然后查看LHS(左侧)、赋值(即静态类型侧)和RHS的接口,除了通常的同时生成Ts之外,您还可以使Ts不同,因为您可以使动态的Ts成为超类。所以你可以说,
ISomeInterface SomeIntWithB=new MyClass()我还没有亲自尝试过,这是我从Schildt C#Ch18收集到的。P558559他还提到了与代表的协方差和逆变,没有泛型。正如人们提到的,“in”是相反的。与泛型一起使用的“out”是协方差。“out”一词的用法也与out vs ref意义上的泛型无关,而in vs out则与泛型有关。协变和逆变也可以在没有泛型的情况下发生,在Schildt c#4.0 ch15中提到的没有泛型的委托的情况下,但仍然适用于当前的c#。这是一个很好的示例,特别是因为您在逆变型IProcessor中使用了协变类型IEnumerable。这是一个很好的示例,特别是因为在逆变型IProcessor中使用了协变型IEnumerable。您写的是“where the type parameter where where the inheritas T.”这不是英语,您能纠正一下吗?完成了,更好吗?因为我不是以英语为母语的人,所以我的语法有时会有点滑倒。是的,那句话现在是英语了。如果你说“a'lesser'类型”,我想你是指“a'lesser'类型”。你写的是“where the type parameter where where the inherits 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);