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

C# 抗变

题目答案

要把泛型类型参数定义为抗变,可在类型定义中使用in关键字:

    public interface IGrassMunchercin T>{ ... }

对于接口定义,抗变类型参数只能用作方法参数,不能用作返回类型。

理解这一点的最佳方式是列举一个在.NET Framework中使用抗变的例子。带有抗变类型参数的一个接口是前面用过的IComparer<T>。可以给Animal实现这个接口,如下所示:

public class AnimalNameLengthComparer : IComparer<Animal>

{

    public int Compare(Animal x, Animal y)

        => x.Name.Length.CompareTo(y.Name.Length);

}

这个比较器按名称的长度比较动物,所以可使用它对List<Animal>的实例排序。通过抗变,还可以使用它对List<Cow>的实例排序,尽管List<Cow>.Sort()方法需要IComparer<Cow>的实例。

    List<Cow> cov;s = new List<Cow> (); 

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

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

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

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

    cows.Sort(new AnimalNameLengthComparer());

大多数情况下,抗变都会发生—它被添加到.NETFramework中就是为了帮助执行这种操作。

网友评论(共0条评论)

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

最新评论

点击加载更多评论>>

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

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

相关视频试题

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

去 App Store 免费下载 iOS 客户端