c#泛型接口

使用泛型可以定义接口,在接口中定义的方法可以带泛型参数。

Public interface  A  <T>

{

T method (T  t);

}

 

1.协变和抗变

.NET4通过协变和抗变为泛型接口和泛型委托添加了一个重要的扩展。协变和抗变指对参数和返回值的类型进行转换。在.NET中,参数类型是协变的。假定有shaperectangle两个雷,rectangle派生自shape基类。声明Display()方法是接受shape类型的对象作为参数的,现在可以传递派生自shape基类的任意对象,例如将rectangle的对象作为参数,编译器接受这个方法调用。

Public void Display(shape p) {}

Rectangle r = new Rectangle {w = 5,h = 2};

Display(r);

方法的返回类型是抗变的。当方法返回一个shape时,不能把它赋值给rectangle,因为是shape的一定是shape的反之不行。

 

2.泛型接口的协变

如果泛型类型用out关键字标注,泛型接口就是协变的。这也一位置返回类型只能是T

Public interface IIndex<out T>

{

T this[int index] {get;}

int Count {get;};

}

 

3.泛型接口的抗变

如果泛型类型用in关键字标注,泛型接口就是抗变的。这样,接口只能把泛型类型T用作其方法的输入。

Public interface IDisplay<int T>

{

Void show (T item);

}

 

Public class ShapeDisplay:Display<shape>

{

Public void show(Shape s)

{

Console.WriteLine();

}

}

Public class shapeDisplay:IDisplay<shape>

{

Public void show(shape s)

{

Console.WriteLine(“ ”,s.GetType().Name.s.Width,s.Height);

}

}

 

Static void Main()

{

IDisplay<shape>  shapeDisplay = new ShapeDisplay();

IDisplay<rectangle>  rectangleDisplay = shapeDisplay;

rectangleDisplay.show(rectangles[0]);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值