一, 接口定义
接口是指一组函数成员而不实现它们的引用类型, 只能由类和结构来是实现, 接口的作用就不阐述了
二, 声明接口
- interface IMyInterface //interface 是关键字, 后面的是接口名称
- {
- int DoSomething(int val1, int val2); // 分号代表实现主体, 不能含有 public 等修饰符, 默认为 public
- }
下面是一些注意事项:
a: 接口声明不能包括静态成员和数据成员, 只能包含非静态成员方法, 时间, 属性, 索引器
b: 函数成员的声明不能有任何实现代码, 并且在每个声明的主体后使用分号分隔
c: 接口成员可以使用 public,private 等修饰符, 而接口成员是隐式 public, 不允许有任何访问修饰符, 包括 public
d: 按照惯例, 接口名称从大写的 I 开始, 如 ITest
e: 如果类从基类继承并使用了接口, 基类必须放在接口之前 (只能有一个基类, 接口可以有多个)
f: 接口可以继承接口
三, 接口和 as 运算符
- IMyInter b = c as IMyInter;
- if(b != null)
- Console.WriteLine("Not null");
代码先使用 as 运算符从类对象获取接口引用, 并赋值给 b, 使 b 的值为 null 或 IMyInter, 判断是否为 null
四, 实现具有重复成员的接口
由于类可以实现任意数量的接口, 因此可能有多个接口成员有相同的签名和返回类型, 例如:
- interface IMyInter1
- {
- void Print(string a);
- }
- interface IMyInter2
- {
- void Print(string b);
- }
对于上面的例子, 有两种解决方法
1, 实现单个成员来满足所有包含重复成员的接口
- class MyClass : IMyInter1, IMyInter2
- {
- public void Print(sting s)
- {
- Console.WriteLine("value is {0}",s);
- }
- }
2. 创建显式接口成员实现, 由接口名称加点号分隔符和成员名称组成
- class MyClass : IMyInter1, IMyInter2
- {
- public void IMyInter1.Print(sting s)
- {
- Console.WriteLine("IMyInter1 value is {0}",s);
- }
- public void IMyInter2.Print(sting s)
- {
- Console.WriteLine("IMyInter2 value is {0}",s);
- }
- }
来源: http://www.bubuko.com/infodetail-2927469.html