1、 C#里面的继承有两种:实现继承和接口继承。前者表示一个类型派生于一个基类型,拥有该基类型的所有成员字段和函数;后者表示一个类型只继承了函数的签名,没有继承任何的实现代码。
2、 C#不像C++支持多重继承,但是可以派生于另一个类和任意多个接口
3、 结构总是派生于System.ValueType,它们还可以派生于任意多个接口;类总是派生于用户选择的另一个类,它们还可以派生于任意多个接口。
4、 C#中虚拟函数的声明方式为:
access-identifier virtual return-type function-name()
成员字体和静态函数都不能声明为virtual
在基类中重载虚函数用关键字override
access-identifier override return-type function-name()
5、 C#中用关键字new隐藏基类中的同名但是非虚函数
access-identifier new return-type function-name()
6、 在C++中抽象类不能实例化,而抽象函数没有执行代码。C#中对抽象的定义是相同的,用法则是要加上关键字abstract。抽象的也是虚拟的,但是不需要加上virtual,并且如果加上的话将会是一个语法错误。
access-identifier abstract class-name/function-name
7、 C#中引入了一个C++中没有的概念:密封
什么是密封呢?对于类来说,这表示不能继承该类;对于方法来说,这表示不能重写该方法。
access-identifier sealed class-name/function-nam
8、 下面是C#中修饰符的具体意义:
|
修饰符
|
应用于
|
说明
|
|
public
|
所有的类型或成员
|
任何代码均可以访问该成员
|
|
protected
|
类型和内嵌类型(即在一个类中定义的类)的所有成员
|
只有派生的类型能访问该成员
|
|
internal
|
类型和内嵌类型的所有成员
|
只能在包含它的程序集中访问该成员
|
|
private
|
所有的类型或成员
|
只能在它所属的类型中访问该成员
|
|
protected internal
|
类型和内嵌类型的所有成员
|
能在包含它的程序集或派生类型中访问该成员
|
|
|
|
|
|
new
|
函数成员
|
成员用相同的签名隐藏继承的成员
|
|
static
|
所有的成员
|
成员不在类的具体实例中执行
|
|
virtual
|
仅函数成员
|
成员可以由派生类重写
|
|
abstract
|
类和函数成员
|
抽象成员定义了成员的签名,但没有提供实现代码
|
|
override
|
仅函数成员
|
成员重写了继承的虚拟或抽象成员
|
|
sealed
|
类
|
成员重写了继承的虚拟成员,但继承该类的任何类都不能重写该成员。必须与override一起使用
|
|
extern
|
仅静态[DllImport]方法
|
成员在外部用另一种语言实现
|
9、 声明接口在语法上与声明抽象类完全相同
access-identifier interface name
但不允许提供接口中任何成员的执行方式。一般情况下,接口中只能包含方法、属性、索引器和事件的声明。不能实例化接口,在接口定义中还不允许声明成员上的修饰符。

最近评论