草庐IT

Covariance

全部标签

c# - 为什么我不能从 List<MyClass> 转换为 List<object>?

我有一个对象列表,属于我的类型QuoteHeader我想将此列表作为对象列表传递给能够接受List的方法.我的代码行是...Tools.MyMethod((List)MyListOfQuoteHeaders);但我在设计时遇到以下错误...Cannotconverttype'System.Collections.Generic.List'to'System.Collections.Generic.List'我需要对我的类(class)做些什么才能允许这样做吗?我认为所有类都继承自对象,所以我不明白为什么这行不通? 最佳答案 这不合法

c# - 为什么我不能从 List<MyClass> 转换为 List<object>?

我有一个对象列表,属于我的类型QuoteHeader我想将此列表作为对象列表传递给能够接受List的方法.我的代码行是...Tools.MyMethod((List)MyListOfQuoteHeaders);但我在设计时遇到以下错误...Cannotconverttype'System.Collections.Generic.List'to'System.Collections.Generic.List'我需要对我的类(class)做些什么才能允许这样做吗?我认为所有类都继承自对象,所以我不明白为什么这行不通? 最佳答案 这不合法

c# - T 必须逆变有效

这是怎么回事?interfaceIRepositorywhereT:IBusinessEntity{IQueryableGetAll();voidSave(Tt);voidDelete(Tt);}它说:Invalidvariance:Thetypeparameter'T'mustbecontravariantlyvalidon'MyNamespace.IRepository.Delete(T)'.'T'iscovariant. 最佳答案 考虑如果编译器允许会发生什么:interfaceIR{voidD(Tt);}classC:IR{

c# - T 必须逆变有效

这是怎么回事?interfaceIRepositorywhereT:IBusinessEntity{IQueryableGetAll();voidSave(Tt);voidDelete(Tt);}它说:Invalidvariance:Thetypeparameter'T'mustbecontravariantlyvalidon'MyNamespace.IRepository.Delete(T)'.'T'iscovariant. 最佳答案 考虑如果编译器允许会发生什么:interfaceIR{voidD(Tt);}classC:IR{

类型参数的 C# 方差注释,限制为值类型

在C#中可以为类型参数添加方差注释,限制为值类型:interfaceIFoowhereT:struct{voidBoo(Tx);}如果方差注释在这种情况下完全没有意义,为什么编译器允许这样做? 最佳答案 Whythisisallowedbycompilersincevarianceannotationmakecompletelynosenseinasuchsituation?这是编译器允许的,因为当我向C#4.0编译器添加差异规则时,我什至从未考虑过有人可能会尝试这样做。编译器警告和错误是特性,为了实现某个特性,至少必须在发布编译器

类型参数的 C# 方差注释,限制为值类型

在C#中可以为类型参数添加方差注释,限制为值类型:interfaceIFoowhereT:struct{voidBoo(Tx);}如果方差注释在这种情况下完全没有意义,为什么编译器允许这样做? 最佳答案 Whythisisallowedbycompilersincevarianceannotationmakecompletelynosenseinasuchsituation?这是编译器允许的,因为当我向C#4.0编译器添加差异规则时,我什至从未考虑过有人可能会尝试这样做。编译器警告和错误是特性,为了实现某个特性,至少必须在发布编译器

C# : Is Variance (Covariance/Contravariance) another word for Polymorphism?

我试图从网上的几篇文章和StackOverflow上的问题中找出Covariance和Contravariance这两个词的确切含义,据我所知,这只是多态性的另一种说法。我上面的说法正确吗?还是我听错了? 最佳答案 肯定和多态有关。不过,我不会说它们只是多态性的“另一个词”——它们是关于非常具体的情况,在这种情况下,您可以将一种类型视为另一种类型在特定上下文中。例如,使用正常的多态性,您可以处理对Banana的任何引用作为对Fruit的引用-但这并不意味着您可以替代Fruit每次当您看到Banana类型时.例如,List不能被视为L

C# : Is Variance (Covariance/Contravariance) another word for Polymorphism?

我试图从网上的几篇文章和StackOverflow上的问题中找出Covariance和Contravariance这两个词的确切含义,据我所知,这只是多态性的另一种说法。我上面的说法正确吗?还是我听错了? 最佳答案 肯定和多态有关。不过,我不会说它们只是多态性的“另一个词”——它们是关于非常具体的情况,在这种情况下,您可以将一种类型视为另一种类型在特定上下文中。例如,使用正常的多态性,您可以处理对Banana的任何引用作为对Fruit的引用-但这并不意味着您可以替代Fruit每次当您看到Banana类型时.例如,List不能被视为L

c# - 协方差和向上转型之间的区别

协方差和向上转型之间有什么区别,或者更具体地说,为什么它们有不同的名称?我见过以下称为“向上转换”的示例:strings="hello";objecto=s;//upcastto'string'to'object'然而,我看到以下称为“协方差”:string[]s=newstring[100];object[]o=s;IEnumerableies=newList();IEnumerableieo=ies;现在,在我未经训练的眼中,协方差似乎与向上转换相同,只是它指的是集合的转换。(关于逆变和向下转型,可以做出类似的陈述)。真的有那么简单吗? 最佳答案

c# - 协方差和向上转型之间的区别

协方差和向上转型之间有什么区别,或者更具体地说,为什么它们有不同的名称?我见过以下称为“向上转换”的示例:strings="hello";objecto=s;//upcastto'string'to'object'然而,我看到以下称为“协方差”:string[]s=newstring[100];object[]o=s;IEnumerableies=newList();IEnumerableieo=ies;现在,在我未经训练的眼中,协方差似乎与向上转换相同,只是它指的是集合的转换。(关于逆变和向下转型,可以做出类似的陈述)。真的有那么简单吗? 最佳答案