------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
接口是一种用来定义程序的协议,它描述可属于任何类和结构的一组相关行为。接口可由方法、属性、事件和索引器或这4种成员类型的任何组合构成,但不能包含字段。
不能实例化接口,它只能包含其成员的签名。接口既不能有构造函数也不能有字段。接口定义也不允许包含运算符重载。
接口的修饰符只能设置为public或internal,其默认的修饰符为internal(只能在同一程序集中的任何代码访问该类型或成员)。接口定义中不允许声明成员的修饰符,但接口成员默认为public,不能显示使用修饰符。
综上,接口具有以下特征:
(1)接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。
(2)不能直接实例化接口,这也是为什么接口没有构造函数的原因。
(3)接口可用包含事件、索引器、方法和属性。
(4)接口不能包含方法的实现。
(5)类和结构可从多个接口继承。
(6)接口自身可从多个接口继承。
1.C#中声明接口时,使用interface关键字:
[修饰符] interface 接口名称[:接口1,接口2,类1……]
{
接口成员;
}
例:
public interface ImyInterface //声明一个接口
{
string Name{ get; set; }
void SayHello(); //接口的成员只能声明,不能有具体的实现
}
2.使用接口(如果快速正确写出接口的所有方法:当敲完class myClass: ImyInterface
时在ImyInterface下会有一条小横线,鼠标置于上面会有提示,双击即可在类里显示所有的方法)
class myClass: ImyInterface
{
string name = " ";
public string Name //实现了接口定义的属性
{
get
{
return name;
}
set
{
name = value;
}
}
public void SayHello() //继承了接口,必须实现此接口的方法
{
Console.WriterLine("你好,我是" + Name);
}
}
class Program
{
static void Main(string[] args)
{
//定义一个接口引用,使用继承此接口的子类进行实例化
ImyInterface my = new maClass();
my.Name = "老孙";
my.SayHello();
Console.ReadKey();
}
}
为什么编写代码时需要接口这个东西呢,这是很多初学者不明白的地方,在整个项目里不写接口也没有任何问题,那接口是不是就是多余的呢,答案是:不是。
一个某某系统往往不是由一个程序员写的,而是由多个程序员互相合作编写出来的。打个比方这个某某系统是一座房子,有的程序员负责烧砖块,做门,做窗户,有的程序员负责用别的程序员做好的砖块、门、窗户建房子,共同合作建这座房子。
如果负责烧砖块的程序员烧的砖块一些大一些小,一些方一些圆,那使用砖块来建房子的程序员不是很郁闷,我什么时候用大的,什么时候用小的,哪个适合我建的房子啊,整个房子我要怎么搭建才适合啊。而接口就是为了解决这个问题,老板说了,砖块烧成10*10*10大小的,然后老板买了一台烧砖机,砖块就只能烧这个形状的,别的都烧不了,而接口就相当于这个烧砖机,强制你一定要烧这种规格的砖,这个建房子的程序员也知道该用什么砖来建房子。
所以,没有这个烧砖机是不是就不能建房子了?可以,只是建起了的房子很混乱,不牢固,效率低,而有了这个规定规格的烧砖机,就规定了烧砖的程序员不能乱来,口头规定说烧这种规格的也不可用,哪天心情不爽了乱烧那不也毁了。建房子的程序员也可以快速的根据这种规格来搭建房子,因为哪怕他有些砖还没烧出来,我也知道他就一定是烧这种规定的砖,别的他烧不了。
简而言之,接口就是一种约束,或者说一种强制协议,没有这种约束可以,只是会导致整个系统设计就很混乱,写方法的人乱写方法的名字或写错了口头规定的方法的名字,导致调用方法的人不知道要调用哪个方法去实现所要的功能。