如何通过ASP.NET泛型三的协变和逆变技巧实现复杂类型转换的长尾操作?
- 内容介绍
- 文章标签
- 相关推荐
本文共计813个文字,预计阅读时间需要4分钟。
.NET泛型系列:
1.ASP.NET泛型之一:简介与基本语法
2.ASP.NET泛型之二:泛型的使用方法
3.ASP.NET泛型之三:使用协变和逆变实现类型转换
4.ASP.NET泛型之四:使用Lazy实现延迟加载
".NET泛型"系列:
ASP.NET泛型一之泛型简介与基本语法
ASP.NET泛型二之泛型的使用方法
ASP.NET泛型三之使用协变和逆变实现类型转换
ASP.NET泛型四之使用Lazy<T>实现延迟加载
协变(Convariant)和逆变(Contravariant)的出现,使数组、委托、泛型类型的隐式转换变得可能。 子类转换成基类,称之为协变;基类转换成子类,称之为逆变。.NET4.0以来,支持了泛型接口的协变和逆变。
泛型协变
如果子类泛型隐式转换成基类泛型,使用泛型协变。
有这样的2个基类和派生类。
public class Animal { public virtual void Write() { Console.WriteLine("我是基类"); } } public class Dog : Animal { public override void Write() { Console.WriteLine("我是小小狗"); } }
为了让派生类Dog隐式转换成基类Animal,先定义支持协变的泛型接口。
本文共计813个文字,预计阅读时间需要4分钟。
.NET泛型系列:
1.ASP.NET泛型之一:简介与基本语法
2.ASP.NET泛型之二:泛型的使用方法
3.ASP.NET泛型之三:使用协变和逆变实现类型转换
4.ASP.NET泛型之四:使用Lazy实现延迟加载
".NET泛型"系列:
ASP.NET泛型一之泛型简介与基本语法
ASP.NET泛型二之泛型的使用方法
ASP.NET泛型三之使用协变和逆变实现类型转换
ASP.NET泛型四之使用Lazy<T>实现延迟加载
协变(Convariant)和逆变(Contravariant)的出现,使数组、委托、泛型类型的隐式转换变得可能。 子类转换成基类,称之为协变;基类转换成子类,称之为逆变。.NET4.0以来,支持了泛型接口的协变和逆变。
泛型协变
如果子类泛型隐式转换成基类泛型,使用泛型协变。
有这样的2个基类和派生类。
public class Animal { public virtual void Write() { Console.WriteLine("我是基类"); } } public class Dog : Animal { public override void Write() { Console.WriteLine("我是小小狗"); } }
为了让派生类Dog隐式转换成基类Animal,先定义支持协变的泛型接口。

