1.接口
对一组方法声明进行统一的命名管理,(不同类型出现相同方法时)
1.通过关键字 interface修饰
2.接口中的方法没有访问修饰符,默认为公有,没有函数体
3.一个类不允许多重继承,但可以继承多个接口
4.定义方法,属性,事件,索引器 不能包含字段,运算符重载,实例构造函数,析构函数
5.接口中不能使用static关键字
6.继承接口的类必须实现接口所有的方法
7.父类中继承的接口成员可以继续继承给子类, 子类重写父类的接口方法,用new关键字覆盖方法
2.显示接口的实现方式
当多个接口包含的方法同名,返回类型和参数都一样的时候
如果一个类同时继承这些接口,隐式的接口出现命名冲突。
interface Itake1{ void print (); }
interface Itake2{ void print (); }
class C:Itake,Itake2
{ void Itake1.print() { Console.WriteLine ("take1"); }
void Itake2.print() { Console.WriteLine ("take2");}
}
C c1 = new C (); 注:实现方法时,在名前指定是哪个接口,不能加public任何修饰符
Itake1 itake = c1; 显示实现的成员默认私有,不能通过对象调用,要转换成对应的接口
itake1.print (); 实现单个接口,通常使用隐式接口,对象可直接调用方法
((Itake2)c1).print (); 实现多个接口,通常使用显示接口
3.接口和抽象类的区别
1.抽象类:abstract 接口:interface 都不能实例化
2.抽象类:包含虚方法,非抽象方法和静态成员 接口:不能包含虚方法和任何静态成员,只能定义方法不能实现
3.抽象类:不能多继承 接口:支持多继承
4.抽象类:本质是类 IS - A 一种继承关系 接口:只是代表实现类具有接口声明的方法 CAN - DO
4.委托
可以理解为函数的一个包装,把函数作为参数传递,相当于c++中的指针
规则:
1.方法的签名必须和委托一致,包括参数的个数,类型,顺序
2.方法的返回类型要和委托一致
步骤:
定义委托类型-声明委托变量-实例化委托-作为参数传递-调用委托
class Mainclass
{ public delegate int dele (int a, int b);
public static void zong(dele a,int x,int y) //将委托作为参数传递
{ Console.WriteLine (a (x, y)); }
public static int add(int a, int b
{ return a + b; }
public static int sub(int a, int b) //静态方法
{ return a - b; }
public int mve(int a, int b) //非静态方法
{ return a * b; }
static void main()
{
Mainclass tm = new Mainclass();
dele tt = add; //dele tt = new dele(add); 两种赋值方法
tt += sub; //委托利用 + 可以封装多个方法,称为委托链技术,可添加重复的方法
tt -= sub; //委托利用 - 可以移除多个方法,从最后删,可以移除没有的方法,效果为无
tt += tm.mve; //通途new出一个对象来添加非静态方法
int a = tt (3, 4); //委托链可以同时添加静态方法和非静态方法(通过对象调用)
Console.WriteLine (a);
zong (tt, 2, 3);
}
}