c# 协变和逆变
2021-05-17 20:30
标签:main 禁止用户 泛型接口 out 隐式 str code 业务 console ??可变性只支持引用类型,禁止用户定义的转换。 ??如果某个返回的类型可以由其子类替换,那么这个类型就是支持协变的 ?? 如果某个参数类型可以由其父类替换,那么这个类型就是支持逆变的 ??只有接口和委托可以拥有可变的类型参数 子类变成父类 父类变成子类 ??实例化参数是子类,泛型接口当中是父类,如果想要正常创建对象,需要在泛型参数上加上in标记 ??实例化参数是子类,泛型接口当中是父类,如果想要正常创建对象,需要在泛型参数上加上in标记 c# 协变和逆变 标签:main 禁止用户 泛型接口 out 隐式 str code 业务 console 原文地址:https://www.cnblogs.com/zhengyazhao/p/11760719.htmlC#可变性类型
可变性参数
参数是逆变
参数是协变实例
public class A
{}
public class B:A
协变
A b=new B();//协变可正常转换
逆变
B b=new A();//这样会直接报错
B b=(B)(new A());//强制转换
泛型的协变和逆变
逆变
定义泛型接口
public interface IUserService
定义业务层实现接口
public class UserService: IUserService
{
}
实例化
static void Main(string[] args)
{
IUserService s =new UserService();
}
如果不加in的话,会报错
无法将类型“ConsoleApp6.IServer.UserService”
隐式转换为“ConsoleApp6.IServer.IUserService”。
存在一个显式转换(是否缺少强制转换?)
协变
定义泛型接口
public interface IUserService
定义业务层实现接口
public class UserService: IUserService
{
}
实例化
static void Main(string[] args)
{
IUserService s =new UserService();
}
如果不加in的话,会报错
无法将类型“ConsoleApp6.IServer.UserService”
隐式转换为“ConsoleApp6.IServer.IUserService”。
存在一个显式转换(是否缺少强制转换?)
上一篇:c# socket 心跳 重连
下一篇:C# TextBox全选