当前位置: 代码迷 >> .NET新技术 >> 关于接口的概念,
  详细解决方案

关于接口的概念,

热度:455   发布时间:2016-04-25 01:24:18.0
关于接口的概念,请教大家!
//定义一个IFavoriteFood 接口
interface IFavoriteFood
{
   void Food();
}

//定义一个IVoice接口
interface IVoice
{
   void Voice();
}

//然后定义了一个Cat的类实现这里面的方法:
class Cat:IFavoriteFood ,IVoice
{
   public void Food()
    {
      Console.WriteLine("我喜欢的食物是老鼠.");
     }
   public void Voice()
     {
       Console.WriteLine("喵,喵,喵...");
     }
}

这个Cat类的功能就是实现两个接口的方法,猫最喜欢的事物是老鼠,而他的声音是“喵,喵,喵”。
class Program
{
   static void Main(string[] args)
   {
     IVoice pVoice = new Cat();
     pVoice.Voice();//只能调用IVoice中定义的方法
     // pVoice.Food();这个就会报错,因为 IVoice 接口中没有这个方法的定义
     IFavoriteFood pFavoriteFood = pVoice as IFavoriteFood;
     pFavoriteFood.Food();//只能调用IFavoriteFood定义的方法
     Console.ReadLine();
   }
}

请教各位:
IFavoriteFood pFavoriteFood = pVoice as IFavoriteFood;这一句代码中,pVoice是接口类型IVoice的变量,而pFavoriteFood 是接口类型IFavoriteFood 的变量,它们没有任何关系,为什么可以将pVoice转换为IFavoriteFood 类型的变量呢?
希望各位高手帮忙解答,谢谢了!!!

------解决思路----------------------
怎么会没关系, pVoice是cat的实例,cat实现了这两个接口。
------解决思路----------------------
哪有什么你认为的那种“转换”?!你对转换这个词儿的理解太沉重了。

pVoice 变量跟 pFavoriteFood 变量都可以引用同一个对象。c#编译器不过是验证了一下类型兼容性而已。在“转换”时,.net framework系统几乎“什么也不用做”,系统知道让两个变量属于同一个对象(你可以看作两个笔名属于同一个作者)。仅此而已。

难道你以为一个人有两个笔名,他就学会了孙悟空的分身术而成了两个人了吗?
  相关解决方案