首页 > 软件操作教程 > 编程开发 > C#
题目内容

C# 协变

题目答案
要把泛型类型参数定义为协变,可在类型定义中使用out关键字,如下面的示例所示:

    public interface IMethaneProducer<out T>{ ... }

对于接口定义,协变类型参数只能用作方法的返回值或属性get访问器。

    说明协变用途的一个很好例子在.NETFramework中,即前面使用的IEnumerable<T>接口。在这个接口中,项类型T定义为协变,这表示可以把支持IEnumerable<Cow>的对象放在IEnumerable<Cow>类型的变量中。

因此下面的代码是有效的:

static void Main(string[] args)

{

    List<Cow> cows = new List<Cow>(); 

    cows.Add(new Cow("Rual")); 

    cows.Add(new SuperCow("Donna"));

    ListAnimals(cows);

    ReadKey();

}

static void ListAnimals(IEnumerable<Animal> animals)

{

    foreach (Animal animal in animals)

    {

        WriteLine(animal.ToString());

    }

}

其中cows变量的类型是List<Cow>,它支持IEnumerable<Cow>接口。通过协变,可以将这个变量传递给需要EEnumerable<Animal>类型的参数的方法。回顾一下foreach循环的工作方式,就知道GetEnumerator()方法用于获取IEnumerator<T>的一个枚举器,该枚举器的Current属性用于访问项。IEnumerator<T>还将其类型参数定义为协变,这表示可以把它用作参数的get访问器,而且一切都运转良好。

网友评论(共0条评论)

请自觉遵守互联网相关政策法规,评论内容只代表网友观点!

最新评论

点击加载更多评论>>

软件操作 新人注册送三重礼

已有 22658 名学员学习以下课程通过考试

相关视频试题

最需教育客户端 软件问题一手掌握

去 App Store 免费下载 iOS 客户端