covariance相关内容

转换列表<DerivedClass>列出<BaseClass>

虽然我们可以从基类/接口继承,但为什么我们不能声明一个 List使用相同的类/接口? 接口A{ }B类:A{ }C类:B{ }类测试{静态无效主要(字符串 [] 参数){A a = 新 C();//行列表listOfA = 新列表();//编译器错误}} 有办法吗? 解决方案 完成这项工作的方法是遍历列表并转换元素.这可以使用 ConvertAll 来完成: 列表 ..
发布时间:2022-01-30 10:03:19 C#/.NET

C#:方差(协方差/逆变)是多态性的另一个词吗?

我试图从网上的几篇文章和 StackOverflow 上的问题中弄清楚 Covariance 和 Contravariance 这两个词的确切含义,据我所知,它只是多态性的另一种说法. 我对上述说法是否正确?还是我弄错了? 解决方案 肯定和多态有关.我不会说它们只是多态性的“另一个词"——它们是关于非常具体的情况,在这种情况下,您可以将一种类型视为另一种类型在特定上下文中. 例 ..
发布时间:2022-01-24 15:56:26 C#/.NET

C# 4.0 元组是协变的吗

(我会自己检查一下,但我还没有 VS2010) 假设我有 2 个基本接口: IBaseModelInterfaceIBaseView接口 以及实现这些的 2 个接口: ISubModelInterface : IBaseModelInterfaceISubViewInterface:IBaseViewInterface 如果我定义一个 Tuple 我想根据返回 Tuple 的工厂的结 ..
发布时间:2022-01-20 08:13:55 C#/.NET

委托协方差混淆难题!

为什么这不起作用?我没有正确理解委托协方差吗? 公共委托 void MyDelegate(object obj)公共课 MyClass{公共 MyClass(){//错误:带有“void MyDelegate(object)"签名的预期方法_delegate = 我的方法;}私人 MyDelegate _delegate;公共无效我的方法(SomeObject obj){}} 解决方案 正确 ..
发布时间:2022-01-18 12:43:20 C#/.NET

.NET 4.0 中的协变和逆变错误

C# 4.0 协变和逆变支持的一些奇怪行为: 使用系统;类程序{静态无效 Foo(对象 x) { }静态无效 Main() {动作动作 = _ =>{ };//C# 3.5 支持静态协变和逆变方法组//转换为委托类型,所以这是完全合法的:行动+= Foo;//因为 C# 4.0 更好地支持协变和逆变//对于接口和委托,这也应该是合法的:动作 += 新动作(Foo);}} ArgumentExc ..
发布时间:2022-01-18 12:10:53 C#/.NET

C# 中的协方差类型有哪些?(或者,协方差:举例)

协方差(大致)是在使用“简单"类型的复杂类型中镜像继承的能力. 例如.我们总是可以将 Cat 的实例视为 Animal 的实例.如果 ComplexType 是协变的,则 ComplexType 可以被视为 ComplexType. 我想知道:协方差的“类型"是什么,它们与 C# 有什么关系(是否支持?) 代码示例会很有帮助. 例如,一种类型是返回类型协变,Java支持,但C#不支 ..
发布时间:2022-01-02 14:03:32 Java开发

为什么是 List不是 List 的子类型?
public void wahey(List list) {}哇哇(新链表()); 对方法的调用不会进行类型检查.我什至不能按如下方式转换参数: wahey((List) new LinkedList()); 根据我的研究,我发现不允许这样做的原因是类型安全.如果允许我们执行上述操作,那么我们可以拥有以下内容: Listld;哇 (ld); 在方法 wahey 中,我们可以向输入列表添加 ..
发布时间:2021-12-31 22:07:03 Java开发

协方差和向上转换之间的区别

协方差和向上转换之间有什么区别,或者更具体地说,为什么它们的名称不同? 我见过以下称为“向上转换"的示例: string s = "hello";对象 o = s;//向上转换为“字符串"到“对象" 然而,我看到以下称为“协方差": string[] s = new string[100];对象[] o = s;IEnumerableies = new List();IEnumerab ..
发布时间:2021-12-31 21:53:32 C#/.NET

C#中的协方差

是否可以在 C# 4.0 中将 List 转换为 List? 大致如下: class joe : human {}列出乔斯 = GetJoes();列表humanJoes = 乔斯; 这不是协方差的用途吗? 如果你能做到: human h = joe1 as human; 你为什么不能做 Listhuman = joes as List; 因为这样做 (joe ..
发布时间:2021-12-31 21:33:14 C#/.NET

C# 转换继承的通用接口

我在投射我想出的界面时遇到了一些麻烦.它是 C# Windows 窗体的 MVP 设计.我有一个在表单类上实现的 IView 类.还有一个 IPresenter,我将其派生为各种特定的 Presenter.每个 Presenter 将根据角色不同地管理 IView,例如打开对话框以使用 AddPresenter 输入一组新数据,而不是使用 EditPresenter 编辑现有数据,后者会将数据预加 ..
发布时间:2021-12-31 14:51:21 C#/.NET

通用类型参数协方差和多个接口实现

如果我有一个带有协变类型参数的通用接口,像这样: interface IGeneric;{字符串 GetName();} 如果我定义这个类层次结构: class Base {}类 Derived1 : Base{}类 Derived2 : Base{} 然后我可以在一个类上实现两次接口,就像这样,使用显式接口实现: class DoubleDown: IGeneric, IGeneric ..
发布时间:2021-12-31 14:45:03 C#/.NET

如何找到两种类型之间最佳拟合的最小协变类型?

IsAssignableFrom 方法返回一个布尔值,指示一种类型是否可从另一种类型分配. 我们如何不仅可以测试它们是否可以from或to彼此分配,而且还知道最小协变类型以获得最佳拟合? 考虑以下示例(C# 4.0) 代码 //Func的方法体无关,使用default()代替Funcx = default(Func);Funcy = default(Func);Func ..
发布时间:2021-12-25 13:26:01 C#/.NET

为什么链接生命周期仅与可变引用有关?

几天前,有一个一个问题,其中有人对包含借用数据本身的类型的可变引用的链接生命周期存在问题.问题是提供对类型的引用,借用与类型内借用数据的生命周期相同.我试图重现这个问题: struct VecRef(&'a Vec);struct VecRefRef(&'a mut VecRef);fn 主(){让 v = vec![8u8, 9, 10];让 mut ref_v = VecRe ..
发布时间:2021-12-25 09:24:26 其他开发