国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

一個(gè)簡(jiǎn)單例子理解C#的協(xié)變和逆變

2019-11-17 02:22:40
字體:
供稿:網(wǎng)友

一個(gè)簡(jiǎn)單例子理解C#的協(xié)變和逆變

關(guān)于協(xié)變逆變,SolidMango的解釋是比較可取的。有了協(xié)變,比如,在需要返回IEnumerable<object>類型的時(shí)候,可以使用IEnmerable<string>來替代;有了逆變,比如,在需要接收IComparable<string>類型形參方法中,可以使用IComparable<object>類型實(shí)參來替代。

協(xié)變

先來體會(huì)協(xié)變。有2個(gè)具有繼承關(guān)系的父類和子類。

    public class Animal
    {
        public string Name { get; set; }
    }
    public class Dog : Animal
    {
        public Dog(string dogName)
        {
            Name = dogName;
        }
    }

現(xiàn)在有一個(gè)幫助類的方法的形參類型是父類集合IEnumerable<Animal>。

    public class MyHelper
    {
        public void PRintAnimalNames(IEnumerable<Animal> animals)
        {
            foreach (var animal in animals)
            {
                Console.WriteLine(animal.Name);
            }
        }
    }

有了協(xié)變,可以在PrintAnimalNames方法中傳入IEnumerable<Dog>類型的實(shí)參替代IEnumerable<Animal>類型。

        static void Main(string[] args)
        {
            List<Dog> dogs = new List<Dog>()
            {
                new Dog("小狗petty"),
                new Dog("小狗lily")
            };
            //協(xié)變
            IEnumerable<Animal> animals = dogs;
            MyHelper myHelper = new MyHelper();
            myHelper.PrintAnimalNames(animals);
            Console.ReadKey();
        }

可見,在方法中基于基類接口類型的形參,調(diào)用該方法的時(shí)候可以傳入派生類接口類型的實(shí)參。

逆變

再來體會(huì)逆變。依然是2個(gè)具有繼承關(guān)系的父類和子類。

    public class Animal 
    {

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 香港| 那曲县| 全州县| 驻马店市| 沙洋县| 兖州市| 永宁县| 日土县| 天津市| 疏勒县| 镇江市| 宁波市| 中阳县| 云林县| 广西| 博乐市| 尚义县| 广宁县| 鄂托克旗| 东乡县| 芒康县| 任丘市| 定南县| 喜德县| 新营市| 木兰县| 巴彦淖尔市| 九龙坡区| 临洮县| 延川县| 威宁| 临澧县| 福鼎市| 枞阳县| 高碑店市| 清涧县| 奉节县| 靖安县| 蓬溪县| 哈尔滨市| 永丰县|