首页 > 其他分享 >协变与逆变

协变与逆变

时间:2024-02-23 09:55:18浏览次数:16  
标签:IFoo 逆变 Student 协变 new public

在C#中父类可以直接转子类,叫做协变
子类转父类需要添加强制转换,叫做逆变

public class Person
{

}
public class Student:Person
{

}

 var p = new Person();
 p = new Student();                   //协变是父类转子类,可以直接转

 var t = new Student();
 t = (Student)new Person();            //逆变是子类转父类 需要强制转换

当我们使用泛型的时候

IFoo<Person> person = new Foo<Student>();        //就会报错

这个时候需要out和in

public interface IFoo<out T>                  //表示T是安全的,可以使用协变
{
    void Work();
}

public class Foo<T> : IFoo<T>
{
    public void Work()
    {

    }
}

public interface IFoo2<in T>                 //表示T是安全的,可以使用逆变
{
    void Work();
}

public class Foo2<T> : IFoo2<T>
{
    public void Work()
    {

    }
}

  IFoo<Person> person = new Foo<Student>();              //+out   父类转子类需要out

  IFoo2<Student> person2 = new Foo2<Person>();           //in     子类转父类需要in

标签:IFoo,逆变,Student,协变,new,public
From: https://www.cnblogs.com/guchen33/p/18028724

相关文章

  • 协变返回类型(covariant return type)
    协变返回类型(covariantreturntype)C++中的协变返回类型(covariantreturntype)是指派生类(子类)中的虚函数返回类型可以是基类(父类)中虚函数返回类型的子类。这个特性使得在派生类中可以返回更具体的类型,而不违反了虚函数的约定。在C++11中,如果派生类的虚函数覆盖基类的虚函数,并......
  • c#学习笔记----------------------------协变和逆变
    协变和逆变协变和逆变能够实现数组类型、委托类型和泛型类型参数的隐式引用转换。协变保留分配兼容性,逆变则与之相反。协变以下代码演示支持协变与不支持协变的泛型和数组的区别//泛型委托publicdelegateTMyFuncA<T>();//不支持逆变与协变......
  • java~类型的逆变和协变
    在Java中,泛型的逆变(contravariance)和协变(covariance)是涉及到泛型类型转换时的两个重要概念。协变(Covariance)协变指的是子类型对象可以赋值给父类型引用的情况。在泛型中,协变表示如果B是A的子类,那么List<B>就是List<A>的子类。这意味着你可以将List<B>赋值给List<A>......
  • 07c#协变逆变
    namespace协变逆变{classProgram{staticvoidMain(string[]args){//问题1:为什么会有协变逆变?//首先,由里氏替换我们知道,子类可以安全的赋值给父类。//(不熟悉可以会议六大设计原则//solid://s——单一职责//o——开闭原则//l——里氏替换//I——接口隔离//d——迪......
  • GBJ2510-ASEMI逆变器专用整流桥GBJ2510
    编辑:llGBJ2510-ASEMI逆变器专用整流桥GBJ2510型号:GBJ2510品牌:ASEMI封装:GBJ-4最大平均正向电流:25A最大重复峰值反向电压:1000V产品引线数量:4产品内部芯片个数:4产品内部芯片尺寸:140MIL峰值正向漏电流:<10ua恢复时间:>2000ns浪涌电流:350A芯片材质:光阻GPP最大正向电压:1.90V工作结温:-55℃~15......
  • C#中的协变、逆变
    一、概述1、在C#中,协变和逆变能够实现数组类型、委托类型和泛型类型参数的隐式引用转换。2、按字面,可以这样理解:协变,感觉协和地隐式引用转换;逆变,逆反直觉地隐式引用转换。二、泛型中的协变和逆变1、定义(1)协变,使你能够使用比原始指定的类型派生程度更大的类型。你可以将IEn......
  • Matlab实现快速傅里叶逆变换
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • C#中的协变
    在C#中,协变(covariance)一词来源于数学中的协方差(co-variance)概念。在数学中,协方差用于衡量两个变量之间的关系。类比到编程语言中的协变,它描述了派生类型与基类类型之间的关系。在C#中,协变允许将派生类型的对象赋值给基类类型的变量,这意味着派生类型是基类类型的一种"协同变体"。也......
  • 快速理解 TypeScript 的逆变和协变
    快速理解TypeScript的逆变和协变发布于 2022-06-0608:36:428081举报深入学习TypeScript类型系统的话,逆变、协变、双向协变、不变是绕不过去的概念。这些概念看起来挺高大上的,其实并不复杂,这篇文章我们就来学习下它们吧。类型安全和型变TypeScript......
  • 泛型协变
    fromtypingimportTypeVar,GenericclassBeverage:❶"""任何饮料"""classJuice(Beverage):"""任何果汁"""classOrangeJuice(Juice):"""使用巴西橙子制作的美味果汁"""T=......