关键字:
virtual: 虚方法,本身可以被实例化,也可以在派生类中重写该方法;
override:在派生类重写基类虚方法时声明,避免了C++中的潜在运行错误;
abstract:声明为抽象类、抽象方法,不能实例化;
sealed: 不可被继承类、不能被重写方法;
param: 表示函数参数为一维数组,且可以支持特殊写法,如 void myAdd(param int[] xarray); -> void myAdd(1, 2, 3); 值得注意的是匿名函数以param声明参数,重载会出现不识别该函数的问题。
修饰符:
protected:只有本身与派生的类型能够访问;
private:只能在所属类型内能够访问;
internal:只能在包含它的程序集中访问;
接口:
语法声明与抽象类完全相同,但不允许提供接口中任何成员的实现;
定义接口时不允许包含重载运算符;
一般用 Ixxx(); 定义;
接口继承:
类继承接口:必须实例化所有成员与方法;
接口继承接口:新接口会拥有原接口的所有成员与自己的新成员;
Interface 与 Abstract 的区别:
借用一张java的区别,与C#有差别,但主体概念上差不多。
借用以上总结,C# 主要的差别在于:
1. 类不能多重继承,接口可以多重继承;
2. 类的成员可公有可私有,接口则都是公有;
is 与 as 操作符:
is:检查一个对象是否兼容于指定类型,并返回一个 Boolean 值;
as: 进行强制类型转换,能转换则返回实例,不能则返回 null;将 if(obj is ClassA){ Class A = (ClassA)obj; } 合并为了同一句:ClassA A = obj as ClassA;
C#5.0 异步关键字:
await:异步操作符,调用异步方法时使用,会启动一个新线程去执行;
async:异步方法声明符,被该符号生命的方法,调用时需要使用 await 操作符,没有 await 的话将会被同步执行;
c ? x:y - c 条件成立,则返回x,否则返回y
x??y - 当 x 为 null 时返回 y,否则返回x