C#中的接口提供了一种实现运行时的多态。通过接口可以使用相同接口的引用来访问实现相同接口的不同类的方法,其实是使用虚方法通过相同的引用调用相同基础的不同的类。
什么是接口?
一种约定 例如属性一般 是人就说
接口的定义:
接口使用 interface 关键字声明,它与类的声明类似。接口声明默认是 public 的。下面是一个接口声明的实例:
定义工人接口
interface IWorker
{
int Dowork(int a, int b);
int this[int index] { get; set; }
}
通常接口命令以 I 字母开头,这个接口只有一个方法 DoWork(),我们可以按照需求设置参数和返回值。以及使用了索引器
然后定义两个继承接口的类
加法工人
class AddWorker : IWorker
{
public int[] arr = new int[100];
int IWorker.this[int index]
{
get
{
return arr[index];
}
set
{
arr[index]=value;
}
}
int IWorker.Dowork(int a, int b)
{
return a+b;
}
int AddWorker_Self_Work(int a,int b)
{
return a * b;
}
}
减法工人
class SubWorker : IWorker
{
public int[] arr = new int[100];
int IWorker.this[int index]
{
get
{
return arr[index];
}
set
{
arr[index]=value;
}
}
int IWorker.Dowork(int a, int b)
{
return a - b;
}
double SubWorker_Self_Work(int a, int b)
{
return a / b;
}
}
接口的定义是指定一组函数成员而不实现成员的引用类型,其它类型和接口可以继承接口。定义还是很好理解的,但是没有反映特点,接口主要有以下特点:
(1)通过接口可以实现多重继承,C# 接口的成员不能有 public、protected、internal、private 等修饰符。原因很简单,接口里面的方法都需要由外面接口实现去实现方法体,那么其修饰符必然是 public。C# 接口中的成员默认是 public 的,java 中是可以加 public 的。
(2)接口成员不能有 new、static、abstract、override、virtual 修饰符。有一点要注意,当一个接口实现一个接口,这2个接口中有相同的方法时,可用 new 关键字隐藏父接口中的方法。
(3)接口中只包含成员的签名,接口没有构造函数,所有不能直接使用 new 对接口进行实例化。接口中只能包含方法、属性、事件和索引的组合。接口一旦被实现,实现类必须实现接口中的所有成员,除非实现类本身是抽象类。
(4)C# 是单继承,接口是解决 C# 里面类可以同时继承多个基类的问题。
最后定义一个使用接口的类
All
class Select_worker
{
public int Dosomething(IWorker A,int c,int d)
{
return A.Dowork(c, d);
}
}
使用
#region 初始化数据
AddWorker AddWorker1=new AddWorker();
SubWorker SubWorker2=new SubWorker();
Select_worker selectwork=new Select_worker();
private void button_Click(object sender, RoutedEventArgs e)
{
int c,b,d;
c=selectwork.Dosomething(A_person, 1, 2);
b=selectwork.Dosomething(B_person, 1, 2);
AddWorker1.arr[5] = c;
d=SubWorker2.arr[c];
AddWorker1.SubWorker_Self_Work(5.6);
}
使用接口的好处:
1,首先声明:
接口非常重要(插座的作用)
2,简单通俗的用法解释:
接口是一个契约:约束双方
设接口A,类B: B实现A
①向下:则B必须有A的所有方法,A约束B;
②向上:保证有上一级需要的方法!
3,当你做一个项目的时候,有些东西不是你的责任,比如你做卖东西的网站:你这个团队负责的是展示商品,查找商品;而购物付款的功能是另一个团队负责的,这个时候你就要在找到的商品的旁边留下“购买”的功能,这就是一个接口,你不负责实现,但你必须保留有接口,不然另一个团队没办法做接下来的工作。
这样的另一个好处是:便于维护,也使得开发过程模块化,各功能是不相连的,不能你修改了查找商品功能,却使得购买的功能也跟着修改,这会是一个杯具