namespace 接口 { class Program { static void Main(string[] args) { } } class Bird { } class Transport { } class Mahjong : Bird { } //如果一个类继承了别的类又继承了接口,那么基类必须写在所有的接口之前 //如果一个类继承了某个接口,那么必须将接口中的所有的成员全部实现一遍(把函数都写出来) //隐式实现接口的话,对应的函数前必须加上public,如果使用快速实现(alt + enter)的话会自动加上public //显示实现接口的话,对应函数前就不能加任何访问权限修饰符 //那些东西可以被继承 //类,接口 //类可以继承于类或接口,结构体只能实现接口 //接口可以集成另一个接口,在类继承该接口时,也同样要实现出所有继承链上的抽象函数 //一个类实现了某个接口 == 一个类继承了某个借口 //接口中可以有哪些成员 //1、函数的声明 //2、属性的声明(只能比声明的访问器写的多,不能比声明的访问器写得少) //3、索引器的声明 //4、事件的声明 struct Car : IFly { public int Num { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } public void Fly() { throw new NotImplementedException(); } public void Run() { throw new NotImplementedException(); } } class Plane : Transport, IFly, ISuperFly { int IFly.Num { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } //public void Fly() //{ //} void IFly.Run() { throw new NotImplementedException(); } void ISuperFly.Fly() { throw new NotImplementedException(); } } //接口无法直接被实例化 //在c#代码中,定义接口,接口名的首字符为大写字母I,用于表示这是一个接口 //在接口中只能够存在行为,且是一种高度抽象的行为(不用实现的方法或者函数称为高度抽象的-行为) interface IFly : ISuperFly { //函数的声明(没有具体去写函数的函数体) //只声明没有具体的函数体的函数,我们称为抽象函数 //在接口中,函数的声明前不能加任何的访问权限修饰符 void Run(); //属性的声明 int Num { get; set; } } interface ISuperFly { void Fly(); } }
注意:
1.在c#代码中,定义接口,接口名的首字符为大写字母I,用于表示这是一个接口