1.接口//接口是指定一组成员而不对他们的成员进行实现的引用类型只能被类和结构体所实现当类或结构体去继承这个接口的时候必须实现接口中定义的所有成员//接口只作属性、行为规范不具备存储数据和定义方法的能力//接口制定规则应该有什么//类或结构体实现接口的指定规则具体怎么有//定义一个接口用interface关键字行业规范一般用大写字母I开头命名//格式interface 接口的名字{ }interfaceIBook{//接口中所有成员隐式public不能主动写访问修饰符//属性声明stringName {get;set; }doublePrice {get;set; }//方法声明voidFn();voidFn2(strings);//接口中不能写字段和静态成员//int a;报错//static int b { get; set; }报错//static void fn3();报错}//某个类或结构体实现接口必须实现这个接口的所有成员//一个类可以继承多个接口classBook:IBook,IPaper{//实现的类或结构体中可以拥有更多的成员}//一个类可以继承另一个类的同时去实现接口classStudent:Person,IStudent{}//当父类有和子类的接口同名的属性时子类可以不需要自己实现也可以通过new关键字重新实现接口只是定义类是实现1.接口中只能定义属性、方法不能定义字段和静态成员2.接口的修饰符默认public不能手写3.类或结构体实现接口时成员只能多不能少如果接口中规定的属性有get,set实现的时候就必须有get,set接口规定的只有get实现时可以有get或get和set4.类可以实现多个接口用,分隔5.当类同时继承父类和实现接口时必须把类放在最前面2.多接口实现//当一个类实现多接口中拥有相同类型的相同属性的声明时只需要实现一次//当一个类实现多接口中拥有不同类型的相同属性的声明需要使用显式接口去实现//显式实现的成员不需要加访问修饰符classTest:IA,IB{intIA.D {get;set; } 123;stringIB.D {get;set; } 张三;publicvoidFn(){//如果同名同参的方法方法体也一样只实现一次//如果同名同参的方法方法体不一样像属性一样显示接口去实现void IA.Fn(){} void IB.Fn(){}}//因为方法可以重载因此可以直接重载两个接口中同名的不同方法publicvoidFn1(intx){}publicvoidFn1(stringx){}Testt newTest();Console.WriteLine(t.D);//True//显式接口成员只能通过接口类型引用访问不能用类对象IAa t;Console.WriteLine(a.D);//123IBb t;Console.WriteLine(b.D);//张三3.接口的继承//一个接口可以继承另一个接口如果接口B继承了接口A某个类实现接口B时要同时实现A和B的所有成员抽象类和接口异同相同点1.抽象类和接口都不能被new创建实例2.都包含未实现的方法(可以声明方法而不提供实现)不同点1.抽象类可以包含非抽象的成员接口只能包含抽象成员2.抽象类只支持单继承一个类一次可以实现多个接口3.抽象类可以有访问修饰符接口不能有访问修饰符4.抽象类可以有字段接口不能定义字段