本身并不实现功能,但提供一种模板定义,为从它继承类或结构提供了一种定义的规范
有了接口,程序员可以把程序定义的更积极啊清晰和条理化
- 理解接口
- 接口支持多继承;抽象类不能实现多继承
- 接口只能定义抽象规则;抽象类即可以定义规则,还可以提供已实现的成员
- 接口是一组行为规范;抽象类是一个不完全的类,着重族的概念
- 接口可以用于支持回调;抽象类不能支持回调,因为继承不支持
- 接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段、属性、包含有实现的方法
- 接口刻意作用于值类型和引用类型;抽象类只能作用于引用类型
- 作用上的区别 抽象类&接口
-
- 抽象类 是对象的抽象,着重表现在继承上,从抽象类派生的类和抽象类存在派生关系
- 接口 用来定义一组行为规范,一旦一个类从一个接口继承后,使用这个类的程序员就会知道这个类肯定包含接口定义的行为,而不用关心如何实现
1 using cs002; 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 8 9 namespace cs00210 {11 //定义抽象类12 public abstract class Travel13 {14 protected string _name;15 public abstract string Name//抽象属性16 {17 get;18 set;19 }20 public void Show()21 {22 Console.WriteLine("这是{0}", _name);23 24 }25 public abstract void GetWheel();26 }27 //定义接口28 interface IAction29 {30 void Move();31 }32 interface test33 {34 void fuck();35 }36 37 public class Car:Travel,IAction,test38 {39 public override string Name40 {41 get42 {43 return _name;44 }45 46 set47 {48 _name = value;49 }50 }51 public Car(string name)52 { _name = name; }53 54 public override void GetWheel()55 {56 Console.WriteLine("小汽车有四个轮子");57 }58 public void Move()59 {60 Console.WriteLine("小汽车行走在公路上");61 }62 public void fuck()63 {64 Console.WriteLine("fuck it!");65 }66 }67 }68 class Program69 {70 static void fun()71 {72 for (int i = 0; i < 10; i++)73 Console.Write(i + " ");74 Console.WriteLine(" ");75 }76 static void Main(string[] args)77 {78 Car c0 = new Car("宇宙无敌");79 c0.GetWheel();80 c0.Move();81 c0.fuck();82 }83 }
-
- 实现接口↑
- 显式实现:继承多个接口,接口之间有重名的方法或属性;当显示实现接口时,类成员只能通过接口使用
1 using cs002; 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 8 9 namespace cs00210 {11 interface It112 {13 void fuck();14 }15 interface It216 {17 void fuck();18 }19 public class test : It1, It220 {21 public test() { }22 void It1.fuck()23 {24 Console.WriteLine("fuck you!");25 }26 void It2.fuck()27 {28 Console.WriteLine("fuck me!");29 }30 }31 class Program32 {33 static void fun()34 {35 for (int i = 0; i < 10; i++)36 Console.Write(i + " ");37 Console.WriteLine(" ");38 }39 static void Main(string[] args)40 {41 test t = new test();42 It1 t1 = (It1)t;43 t1.fuck();44 It2 t2 = (It2)t;45 t2.fuck();46 47 }48 }49 }