C#关键字

时间:2008-10-09 08:03:51  来源:互联网  作者|记者:不详  浏览:0  大小:【】【】【
捌度空间导读:今天突然有一种整理一下C#关键字的冲动,就转化为行动了!C# abstract ...

今天突然有一种整理一下C#关键字的冲动,就转化为行动了!

C# as

bool

byte

catch

checked

const

decimal

delegate

double

enum

explicit

false

fixed

for

get

if

in

interface

is

long

new

object

override

private

public

ref

sbyte

set

sizeof

static

switch

throw

try

uint

unchecked

ushort

value

volatile

void

while

 

 

 

 

Code1    class A
 
2    {
 
3        protected virtual void F() { Console.WriteLine("A.F");}
 
4        protected virtual void F2() { Console.WriteLine("A.F2");}
 
5    }
 
6    class B : A
 
7    {
 
8        sealed protected override void F() { Console.WriteLine("B.F");}
 
9              protected override void F2() {Console.WriteLine("A.F3");}
10    }
11    class C : B
12    {
13        // Attempting to override F causes compiler error CS0239.
14        // protected override void F() { Console.WriteLine("C.F"); }
15
16        // Overriding F2 is allowed.
17        protected override void F2() { Console.WriteLine("C.F2"); }
18    }

说明:
当在类中定义新的方法或属性时,通过不将这些方法或属性声明为 virtual,可防止派生类重写这些方法或属性。
将 abstract 修饰符用于密封类是错误的做法,因为抽象类必须由提供抽象方法或属性的实现的类继承。

当应用于方法或属性时,sealed 修饰符必须始终与 override 一起使用。

由于结构是隐式密封的,因此它们不能被继承。

abstract & virtual
abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示类只能是其他类的基类。接下来描述了abstract的一些特性:不能实例化;可以包含抽象方法和抽象访问器;不能用 sealed 修饰符修改抽象类,意味着该类不能被继承;从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实现;
在方法或属性声明中使用 abstract 修饰符以指示此方法或属性不包含实现等等。"abstract"可以修饰类、方法、属性、索引器及事件。

而看到virtual关键字的时候,产生了一个疑问:"virtual"关键字只能修饰方法和属性,却不能修饰类~但清楚记得老师讲c++的时候有一个概念,叫虚基类。难道c#把virtual的这个特性去掉了?然后我到google找答案~看到了两篇文章“c++虚基类”和“深入剖析c#继承机制”,终于明白了原来是由于这两者的继承机制不同而决定的。c++允许多重继承,而c#只允许派生类从一个类中继承,由于多重继承产生的二义性问题需要虚基类来解决,所以c++有虚基类的概念,而c#由于单继承的原因不会产生继承而带来的二义性问题,
所以不需要virtual关键修饰类。



引用地址:

相关文章