一、抽象类与接口
(1)抽象类:
1、类中的要领不供给具体实现,但该类的派生类必需实现这些要领,这些要领在C#中称为抽象要领。
2、 抽象要领必需是一个没有被实现的空要领。包罗抽象要领的类称为抽象类,抽象类中也可以包罗非抽象要领。 因为抽象类是用来作为基类的,所以不能直接被外部措施实例化,而且也不能被密封。
3、通过关键字abstract进行符号将类声明为抽象。 不能创建抽象类的东西,但可以创建抽象类的引用。 一个abstract类可以不包罗抽象要领,可以包罗非抽象要领和变量。 抽象要领是虚要领的特例。 结构函数和静态要领不能是抽象的。 一个非abstract类不能包罗抽象要领。 子类若要笼罩抽象类的抽象要领时,要使用override关键字。
(2)接口:
接口成员访谒权限为public,,但不能加访谒修饰符, 接口成员不能有界说。 接口的成员必需是要领,属性,事件或索引器,不能包罗常数、字段、运算符、实例结构函数、析构函数或类型。
接口和类的比拟:
二、is与as运算符is运算符:可以查抄东西与类之间的关系,形式为:if ( obj is classname )…… ,可用于确定接口是否可用。
as运算符:完成的成果等价于:先用is查抄,再执行东西类型转换。 如果类型不兼容,as运算返回null。
三、委托与事件(还是不太大白!!!)(1)委托:是一种可以指向要领的引用,可以理解为一种函数指针,是类型安适的。它类似于C++中的函数指针,通过对付要领特征和返回值类型的声明,封装了具有不异特征和返回类型的要领。
使用委托需要三个法式: 声明委托类型 ==》创建委托实例 ==》 向委托实例注册要领。
1 class Delegates 2 { 3 // 委托界说 4 public delegate int Call(int n1, int n2); 5 class Math 6 { 7 // 乘法要领 8 public int Multiply(int n1, int n2) 9 { 10 return n1*n2; 11 } 12 13 // 除法要领 14 public int Divide(int n1, int n2) 15 { 16 if(n2!=0) 17 return n1/n2; 18 else{ 19 Console.WriteLine("除数不能为零!"); 20 return -999999999; 21 } 22 } 23 } 24 25 static void Main(string[] args) 26 { 27 // 委托的东西 28 Call objCall; 29 // Math 类的东西 30 Math objMath = new Math(); 31 // 将要领与委托关联起来 32 objCall = new Call(objMath.Multiply); 33 // 将委托实例化 34 int result = objCall(4, 3); 35 System.Console.WriteLine("功效为 {0}", result); 36 } 37 }
View Code(2)事件:语法——[访谒修饰符] event 委托名 事件名;