接口的修饰符 interface 接口命名规定用大写字母 I 开头,表示是一个接口。 例如:
interface IMyText{ int Text1(); }1.c#中接口的本质是一个特殊的抽象类。 2.因此接口有很多东西和抽象类一致。(点击进入抽象类) ----例如:在实现接口时,必须实现接口的每一个方法但是不能使用override。 3.接口中不能有字段,构造函数,只能有属性,方法,索引器和事件。 例如:
//不能有 int num;4.接口成员一定是公共的,但接口成员不能有任何的访问修饰符,public也不行,而且接口成员不能有任何的代码体。 例如:
interface IText { int Text(); //方法 string SayHi()//属性这个和自动属性很像但是不是自动属性 { get; set; } }5.接口成员不能实例化,泵用static,virtual,abstract,sealed修饰。 6.接口的目的也是为了实现多态的,接口能钩实现多重继承的问题。 例如: 有一个学生类,同时想 弹吉他 和 弹钢琴 当然可以写成这样
public class Student { public void PlayGuitar(){} public void PlayPiano(){} }但是这样写有一个缺点,如果再有一个类想弹吉他,弹钢琴这两个方法又需要再写一遍,但是由于继承又只能是一个。因此就需要用接口多继承。
interface IPlayGuitar//弹吉他接口 { void PlayGuitar(); } interface IPlayPaino()//弹钢琴接口 { void PlayPaino(); } public class Student:IPlayGuitar,IPlayPaino //学生类 { public void PlayGuitar(){} public void PlayPaino(){} }这只是一个最简单的例子,接口就相当于一个规范简单,让子类实现。
7.接口的显示实现。 如果在两个接口中的方法名恰好相同并且中同一个子类中实现,这个时候我问又想区分开两个接口不一样,我们就需要显示调用接口。 例如:
interface IText1//接口一 { void Text(); } interface IText2//接口二 { void Text(); } public class Fun:IText1,IText2 { public void Text()//隐式调用 { Console.WriteLine("asd123"); } void IText1.Text()//显式调用IText1的方法 { Console.WriteLine("asd"); } void IText2.Text()//显式调用IText2的方法 { Console.WriteLine("123"); } }注意显式调用不能写可访问呢修饰符。 8.显示接口只能使用接口引用掉用到,而隐式接口可以使用接口引用也可以使用类来调用。 例如:
// 下面的代码和上述代码有联系 //显示接口调用 IText1 t = new IText1();//只能通过这种方式调用使用接口名 t.Text(); //隐式调用有两种调用方法 Fun f = new Fun();//方法一 f.Text(); IText2 t = new IText2(); t.Text();显示接口很少使用,只在上面那中极为特殊的情况下使用。
