星辰的泪
2018-08-21 10:57
如果我不在调用方法里面加ICatchMice ic = (ICatchMice)c;这一字段也可以调用接口的抓老鼠和爬树方法,而加了这一段代码之后这个ic只能调用抓老鼠这个接口的方法,这不是限制了ic的调用方法的范围吗?但是又与c无关,我想问下各位大神这样做有什么意义呢?谢谢!
用接口还是用类调用要看具体的使用场景的。
假如有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这些宠物叫什么名字吗?
不加ICatchMice ic = (ICatchMice)c;
ic.CatchMice();就没有办法使用,这里老师这么写的目的应该是为了刚好的向学生展示这种调用方法的限制范围
C#面向对象编程
69150 学习 · 160 问题
相似问题