隐式实现接口
既可用接口调用方法,也可用具体类调用方法
显式实现接口
实现接口的方法前不能用访问修饰符public,必须显式指定接口名称
返回值类型 接口名称.接口方法
只能是通过接口来调用,而不能通过具体类来做
同时实现 隐式实现接口和显式实现接口
这样完成了对一个接口成员提供多份实现实体,访问时可以用类的实例和接口的引用来分别调用这两种实现实体。显式才是真正的接口实现方式。
结论:当显式实现方式存在时,隐式实现方式就失效了。但这不能表示显式实现方式就不好,当一个类实现的多个接口中具有相同的方法时,用显式方式来专门实现某个接口的方法是就显得非常有用。
class Program
{
static void Main(string[] args)
{
IFlyable1 myEagle1 = new Eagle();//隐式实现接口 接口调用
myEagle1.Fly();
Eagle myEagle2 = new Eagle();//隐式实现接口 类调用
myEagle2.Fly();
IFlyable1 myBallon1 = new Balloon();//显式实现接口 指定方法到底是哪个接口的
myBallon1.Fly();
IFlyable2 myBallon2 = new Balloon();
myBallon2.Fly();
Balloon myBalloon3 = new Balloon();
// myBalloon3.Fly();
IFlyable1 mySparrow1 = new Sparrow();//显式实现接口
mySparrow1.Fly();
Sparrow mySparrow2 = new Sparrow();//隐式实现接口
mySparrow2.Fly();
Console.ReadKey();
}
}
public abstract/*抽象类*/ class Bird
{
public abstract void Eat();
}
class Sparrow:Bird,IFlyable1
{
public void Fly()
{
Console.WriteLine("隐式实现 麻雀飞枝头");
}
void IFlyable1.Fly()
{
Console.WriteLine("显式实现 麻雀飞枝头");
}
public override void Eat()
{
Console.WriteLine("麻雀吃粮食");
}
}
class Eagle:Bird,IFlyable1
{
public override void Eat()
{
Console.WriteLine("老鹰吃小鸡");
}
public void Fly()
{
Console.WriteLine("鹰击长空");
}
}
class Balloon:IFlyable1,IFlyable2
{
void IFlyable1.Fly()//显式实现接口
{
Console.WriteLine("我是1中的Fly");
}
void IFlyable2.Fly()
{
Console.WriteLine("我是2中的Fly");
}
}
interface IFlyable1
{
void Fly();
}
interface IFlyable2
{
void Fly();
}