1、什么是接口(接口就是能干什么):
接口就是一种规范、协议,约定好遵守某种规范就可以写通用的代码。
定义了一种具有各种功能的方法。(只是一种能力,没有具体的实现,像抽象方法一样,“光说不做”)
2、接口存在的意义:多态
多态的意义:程序可扩展性。程序可扩展性:让程序变得更加灵活,节省成本,提高效率。
接口解决了类的多继承问题
接口解决了类继承以后体积庞大的问题
接口之间可以实现多继承
例子:
//接口不能实例化,接口中不能有任何实现
//接口就是让子类来实现的
public interface IFlyable
{
//接口里面只能包含方法、时间、属性、索引器
//接口中的所有成员都不能有显示的访问修饰符
//默认为 public
void Say(); //方法
void M1(string msg); //方法
//接口中这样写属性表示未实现的属性,方法中这样写表示自动属性
string Name //属性
{
get;
set;
}
string this[int index]//索引器
{
get;
set;
}
}
接口中的成员,子类必须实现
1、 接口可以多实现,一个类只能继承一个父类,但是可以实现多个接口
2、 接口解决了不同类型之间的多态问题,比如鱼和船不是同一类型,但是都能在睡了“游泳”,只是方式不一样,要对“游泳”实现多态,就只能考虑接口。
3、显示实现接口
方法重名后的解决办法
显示实现接口后只能通过接口来调用。不能通过类对象本身来调用(显示实现接口,查看IL是private的,防止通过类来调用)
实现接口中的方法时用:接口名.方法名() ,并且没有访问修饰符private
显示实现接口后只能通过接口变量来调用,业务显示实现接口默认为private
例子:
namespace 显示实现接口
{
class Program
{
static void Main(string[] args)
{
Men men = new Men();
men.fly(); //正常实现接口的fly方法,显示实现的调用不到,因为是 private
IFly2 f = new Men();
f.fly();
Console.ReadKey();
}
}
public interface IFly1
{
void fly();
}
public interface IFly2
{
void fly();
}
public class Men : IFly1,IFly2
{
public void fly()
{
Console.WriteLine("实现IFly1中的fly方法。。。");
}
//显示实现接口没有访问修饰符,默认是私有的
//显示实现接口时,在方法名前加了“接口名” 形如:接口名.方法名()
void IFly2.fly()
{
Console.WriteLine("实现IFly2中的fly方法。。。。");
}
}
}