网亚上网行为管理系统 -上网管理软件协变体
26
2018
02

上网管理软件协变体

以这种方式在泛型类型之间转换的功能称为泛型变体。在一些情况下,希望能缩窄类型变量,如前面的例子所示,有时则希望加宽类型变量,这些称为协变和逆变。

协变:在前面的例子中,Tortoise的IEnumerable可以转换为Animal的IEnumerable。这称为协变,是允许的,因为T接口的IEnumerable已更新为包含out关键字:

C#

Public interface IEnumerable<outT>:IEnumerable{

IEnumerable<T>GetEnumerator()

}

VB

Interface IEnumerable(Of outT):Inherits IEnumerable

Function GetEnumerator() AsIEnumerator(Of T)

End Interface

使用out关键字还可以声明有变体类型才是的接口和委托。例如,在下面的代码中,IAnimalCreator接口允许加宽类型参数,可以把Lion的IAnimalCreator(由MainForm实现)转换为Animal的IAnimalCreator(需要DoAnimalAction方法)。

C#

Public interface IAnimalCreator<OutT> where T:Animal{

T CreateAnimal();

}

Public partial class MainForm:Form,IAnimalCreator<Lion>{

Public MainForm(){

InitializeComponent();

 

« 上一篇

相关文章:

评论列表: