//定义一个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系统几乎“什么也不用做”,系统知道让两个变量属于同一个对象(你可以看作两个笔名属于同一个作者)。仅此而已。
难道你以为一个人有两个笔名,他就学会了孙悟空的分身术而成了两个人了吗?