【C# Common Keyword】
1、abstract
Use the abstract modifier in a class declaration to indicate that a class is intended only to be a base class of other classes. Members marked as abstract, or included in an abstract class, must be implemented by classes that derive from the abstract class.
使用abstract修饰类,表示着该类只作为基类使用,无法生该类实例。用abstract修饰的方法,或方法在abstract class中,则子类必须实现这2种方法。
abstract和sealed不能同时使用。abstract意味着希望子类继承,sealed意味着禁止子类继承。
Use the abstract modifier in a method or property declaration to indicate that the method or property does not contain implementation.
abstract修饰方法,意味着方法缺少实现。
An abstract method is implicitly a virtual method.
子类实现abstract方法时,必须加上override。
抽象方法在抽象类中没有函数体。抽象类中的抽象方法是没有方法体的,继承其的子类必须实现抽象类的抽象方法。
抽象类有如下特征:
- 抽象类不能实例化
- 抽象类的派生类必须实现所有抽象方法
- 抽象类中的抽象方法是没有方法体的,继承其的子类必须实现抽象类的抽象方法
- 抽象方法是隐式的虚方法
- 只允许在抽象类中使用抽象方法声明
- 抽象方法在抽象类中没有方法体
- 在抽象方法声明中,不能使用static或者virtual修饰符
1 abstract class A //abstract 关键字在class前面 2 { 3 public abstract void run();//方法是将关键字abstract 添加到方法的返回类型的前面 4 }
2、override
1 abstract class A 2 { 3 public virtual void MethodA() 4 { 5 //do something 6 } 7 public abstract void run(); 8 } 9 public class B:A 10 { 11 public override void MethodA() 12 { 13 //do somthing 14 } 15 public virtual void run() 16 { 17 //do something 18 } 19 }
3、virtual
virtual 关键字允许在派生类中重写这些对象。默认情况下,方法是非虚拟的,不可以重写非虚方法,virtual关键字不可以与static、abstract、private、override一起使用。virtual关键字又是和override紧密不可分的,如果要实现virtual方法就必须要使用override或new关键字。
4、sealed
1 class X 2 3 { 4 protected virtual void F() { Console.WriteLine("X.F"); } 5 protected virtual void F2() { Console.WriteLine("X.F2"); } 6 } 7 class Y : X 8 { 9 sealed protected override void F() { Console.WriteLine("Y.F"); } 10 protected override void F2() { Console.WriteLine("X.F3"); } 11 } 12 class Z : Y 13 { 14 // Attempting to override F causes compiler error CS0239. 15 // protected override void F() { Console.WriteLine("C.F"); }//sealed修饰的方法是不允许继承的 16 17 // Overriding F2 is allowed. 18 protected override void F2() { Console.WriteLine("Z.F2"); } 19 }
5、new 修饰符
在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。隐藏继承的成员时,该成员的派生版本将替换基类版本。虽然可以在不使用 new 修饰符的情况下隐藏成员,但会生成警告。如果使用 new 显式隐藏成员,则会取消此警告,并记录要替换为派生版本这一事实。
参考:
1、http://blog.csdn.net/richerg85/article/details/7407544
2、http://msdn.microsoft.com/zh-cn/library/435f1dw2(v=vs.90).aspx