C# 協(xié)變
public interface IMethaneProducer<out T>{ ... }
對(duì)于接口定義,協(xié)變類型參數(shù)只能用作方法的返回值或?qū)傩詆et訪問(wèn)器。
說(shuō)明協(xié)變用途的一個(gè)很好例子在.NETFramework中,即前面使用的IEnumerable<T>接口。在這個(gè)接口中,項(xiàng)類型T定義為協(xié)變,這表示可以把支持IEnumerable<Cow>的對(duì)象放在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>接口。通過(guò)協(xié)變,可以將這個(gè)變量傳遞給需要EEnumerable<Animal>類型的參數(shù)的方法。回顧一下foreach循環(huán)的工作方式,就知道GetEnumerator()方法用于獲取IEnumerator<T>的一個(gè)枚舉器,該枚舉器的Current屬性用于訪問(wèn)項(xiàng)。IEnumerator<T>還將其類型參數(shù)定義為協(xié)變,這表示可以把它用作參數(shù)的get訪問(wèn)器,而且一切都運(yùn)轉(zhuǎn)良好。
點(diǎn)擊加載更多評(píng)論>>