面向接口编程的一个例子

举个例子说说接口编程的思想魅力所在,假如我们模拟世界上所有的事物,生成一个个的类.现在的是经济社会,大家都可喜欢谈钱的事了.那我们就想知道下每类事物的价钱,价值.咋整?首先想到的自然是让每个类都提供一个函数,然后计算出自己的价钱.但函数名字咋取?随便乱取可就乱套了,于是来个接口IValuable.接口里面有函数声明double GetValue();
于是所有类继承这个接口,然后用GetValue这个函数去实现计算自己价钱的功能.当然有些事物是无价的,没法计算.比如人家要问你你家老婆值多少钱啊,你肯定会发火的.当然除非你老婆是干某个特殊行业的就不在此例了啊.于是我们只让那些有价的事物去继承IValuable这个接口

interface IValuable

{

   double GetValue();

}


  有类Car和House继承了此接口.假如你设计一个软件输入Car的牌子或House种类,就会返回是多少钱.于是可以这样写代码


  double money ;

  

   法拉利 car = new 法拉利(); //类法拉得是继承自Car的一个类

  money = car.GetValue();
 奇瑞QQ qqCar = new 奇瑞QQ();
  money = qqCar.GetValue();

  别墅 house = new 别墅();  //类别墅是继承自House的一个类
  money = house.GetValue(); 

 

我们发现如果车的各类太多,你这样用起来不方便,于是想到用多态.于是来个这样的函数,当然前提是类Car中的函数GetValue声明为virtual类型
int GetAllCarsValue(Car car)
 {
    return car.GetValue();
  }
Car car;
double money;
car = new 法拉利();
money = GetAllCarsValue(car);
car = new 奇瑞QQ();
money = GetAllCarsValue(car);
这样用着挺爽吧.但是你可能还想更爽一点,如果不仅是Car类,或者House类这样用多态处理.而是把所有的类合到一起用多态处理.你马上想到在C#类的世界中所有类都继承自objet,用它貌似可以实现这样的多态,但object可不给你提供GetValue()这函数,我们想想也知道,如果object针对无数的类定义一些函数,那它就是一个巨无霸了啊.而且既然它是最顶端的父亲就得体现所有类的共性,这GetValue也不是所有类的共性啊.


那咋整啊?自然要用到接口了,我们知道用虚函数可以实现多态.但用接口也能实现多态.于是代码这样写
double GetAllClassValue(IValuable iv)
{
   return iv.GetValue();
}

然后这样调用
IValuable  ivClass;
double money;


ivClass= new 法拉利();
money = GetAllClassValue(ivClass);
ivClass = new 奇瑞QQ();
money = GetAllClassValue(ivClass);
ivClass = new 别墅();
money = GetAllClassValue(ivClass);

通过上面的例子你发现面向接口编程的美妙了之处了吧.

你可能感兴趣的:(C#学习)