05
2018
03

电脑行为管理软件逆变参数

在这段代码中,转换是安全的,因为CreateAnimal方法不接受任何类型化参数(即参数要转换的类型)。相反,类型参数定义了返回(或out)值的类型,在T上进行了接口协变。

逆变:有时还希望加宽类型参数,这称为逆变,由IComparer接口使用。可以想象,Animal的IComparer也是Lion的IComparer,因为如果可以比较任何动物,就可以比较Lion。这个转换是允许的,因为IComparer接口已更新为使用in关键字。

C#

Public interface IComparer<in T>{

Public int Compare (T left,Tright);

}

VB

Interface IComparer(Of In T)

Fuction Compare(left As T,right As T)As Integer

End Interface

Var animal=DoAnimalAction(this);

MessageBox.Show(animal.GetType().Name);

}

Private AnimalDoAnimalAction(IAnimalCreator<Animal>action){

Return action.CreateAnimal();

}

LionIAnimalCreator<Loin>.CreateAnimal(){

Return new Lion();

}

VB

Public InterfaceIAnimalCreator (Of OutT As Animal)

Function CreateAnimal() As Animal

End Interface

 

Public Class MainForm

Implements IAnimalCreator(Of Lion)

 

Public Sub New()

InitializeComponent()

Dim animal=Do AnialAction(Me)

MessageBox.Show(animal.GetType().Name)

End Sub

 

Public Function DoAnimalAction(ByValaction As IAnimalCreator(Of Animal))_

As Animal

Return action.CreateAnimal()

End Function

 

Public Function CreateAnimal() AsAnimal_

Implements IAnimalCreator(Of Lion).CreateAnimal

Return New Lion

End Fuction

End Class

 

« 上一篇

相关文章:

评论列表: