关于接口的问题

来源:2-7 接口

星辰的泪

2018-08-21 10:57

https://img2.mukewang.com/5b7b7e5a000119d402790080.jpg

https://img.mukewang.com/5b7b7eac0001a1b103300099.jpg

如果我不在调用方法里面加ICatchMice ic = (ICatchMice)c;这一字段也可以调用接口的抓老鼠和爬树方法,而加了这一段代码之后这个ic只能调用抓老鼠这个接口的方法,这不是限制了ic的调用方法的范围吗?但是又与c无关,我想问下各位大神这样做有什么意义呢?谢谢!

写回答 关注

2回答

  • 慕课小霸王
    2018-08-21 15:38:04

    用接口还是用类调用要看具体的使用场景的。

    假如有10只不同的宠物,攻城狮A负责收集这10只宠物的叫声,攻城狮B负责听这些宠物的声音来给宠物分类。那么你难道要传10个不同的宠物类给B吗,这样B会打死你的。这个时候,你就要建一个叫的接口集合,把10只宠物都封装进这个接口集合,把这个接口集合传给B,B只要循环遍历接口集合,分别调用这个接口的叫的方法,就能让不同宠物叫出声。。。

    你可以根据我写的小代码然后和我上面的解释,小小脑补一下。。。

    //攻城狮A负责把不同的宠物装进箱子

            public static List<ICall> GcsA()

            {

                Pig p = new Pig();

                Dog d = new Dog();

                List<ICall> listi = new List<ICall>();

                listi.Add((ICall)p);

                listi.Add((ICall)d);

                return listi;

            }

            static void Main(string[] args)

            {

                //攻城狮B拿到了10只宠物的箱子,循环让它门叫

                List<ICall> listi = GcsA();

                for (int i = 0; i < listi.Count; i++)

                {

                    Console.WriteLine(listi[i].Call());

                }

            }

    最后说一句,接口一般用于规范,这个规范不仅仅只是对创建者的规范,也是对使用者的规范。B只要宠物的叫声,那么你还有必要告诉B这些宠物叫什么名字吗?

  • 毕竟012
    2018-08-21 15:32:11

    不加ICatchMice ic = (ICatchMice)c;

    ic.CatchMice();就没有办法使用,这里老师这么写的目的应该是为了刚好的向学生展示这种调用方法的限制范围

    慕粉1026... 回复星辰的泪

    就是为了限定范围,你楼上已经讲的很详细了,限定范围就可以减少代码开销

    2019-07-21 17:11:58

    共 2 条回复 >

C#面向对象编程

本系列教程主要是,带你学习C#面向对象编程的编程思想、编程技巧

69150 学习 · 160 问题

查看课程

相似问题