为了账号安全,请及时绑定邮箱和手机立即绑定

关于接口的问题

https://img1.sycdn.imooc.com//5b7b7e5a000119d402790080.jpg

https://img1.sycdn.imooc.com//5b7b7eac0001a1b103300099.jpg

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

正在回答

2 回答

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

假如有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这些宠物叫什么名字吗?

6 回复 有任何疑惑可以回复我~

不加ICatchMice ic = (ICatchMice)c;

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

0 回复 有任何疑惑可以回复我~
#1

星辰的泪 提问者

那为何不直接用c.CatchMice();直接调用抓老鼠的这个方法呢?这不是多此一举吗?我就是这一点没想明白
2018-08-21 回复 有任何疑惑可以回复我~
#2

慕粉1026331268 回复 星辰的泪 提问者

就是为了限定范围,你楼上已经讲的很详细了,限定范围就可以减少代码开销
2019-07-21 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C#面向对象编程
  • 参与学习       69209    人
  • 解答问题       160    个

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

进入课程

关于接口的问题

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号