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

C# 協(xié)變

提問人:劉團(tuán)圓發(fā)布時間:2020-12-08
要把泛型類型參數(shù)定義為協(xié)變,可在類型定義中使用out關(guān)鍵字,如下面的示例所示:

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

對于接口定義,協(xié)變類型參數(shù)只能用作方法的返回值或?qū)傩詆et訪問器。

    說明協(xié)變用途的一個很好例子在.NETFramework中,即前面使用的IEnumerable<T>接口。在這個接口中,項(xiàng)類型T定義為協(xié)變,這表示可以把支持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>接口。通過協(xié)變,可以將這個變量傳遞給需要EEnumerable<Animal>類型的參數(shù)的方法。回顧一下foreach循環(huán)的工作方式,就知道GetEnumerator()方法用于獲取IEnumerator<T>的一個枚舉器,該枚舉器的Current屬性用于訪問項(xiàng)。IEnumerator<T>還將其類型參數(shù)定義為協(xié)變,這表示可以把它用作參數(shù)的get訪問器,而且一切都運(yùn)轉(zhuǎn)良好。

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

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