位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# 抗變

提問人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-08

要把泛型類型參數(shù)定義為抗變,可在類型定義中使用in關(guān)鍵字:

    public interface IGrassMunchercin T>{ ... }

對(duì)于接口定義,抗變類型參數(shù)只能用作方法參數(shù),不能用作返回類型。

理解這一點(diǎn)的最佳方式是列舉一個(gè)在.NET Framework中使用抗變的例子。帶有抗變類型參數(shù)的一個(gè)接口是前面用過的IComparer<T>??梢越oAnimal實(shí)現(xiàn)這個(gè)接口,如下所示:

public class AnimalNameLengthComparer : IComparer<Animal>

{

    public int Compare(Animal x, Animal y)

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

}

這個(gè)比較器按名稱的長(zhǎng)度比較動(dòng)物,所以可使用它對(duì)List<Animal>的實(shí)例排序。通過抗變,還可以使用它對(duì)List<Cow>的實(shí)例排序,盡管List<Cow>.Sort()方法需要IComparer<Cow>的實(shí)例。

    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());

大多數(shù)情況下,抗變都會(huì)發(fā)生—它被添加到.NETFramework中就是為了幫助執(zhí)行這種操作。

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部