C#基础——abstract
abstract修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中abstract修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。
抽象类具有以下特性:抽象类不能实例化;抽象类可以包含抽象方法和抽象访问器;不能用sealed修饰符修改抽象类,因为sealed会使得抽象类无法被继承;从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。
在方法或属性声明中使用abstract修饰符以指示方法或属性不包含实现。抽象方法具有以下特性:抽象方法是隐式的虚方法;只允许在抽象类中使用抽象方法声明;因为抽象方法声明不提供实际的实现,所以没有方法体,方法什么只是以一个分号结束,并且在签名后没有大括号({});实现由一个重写方法override提供,此重写方法是非抽象类的一个成员;在抽象方法声明中使用static或virtual修饰符是错误的。
-
//抽象类不能是密封的或静态的 //abstract sealed class TestClass{} //abstract static class TestClass{}
-
abstract class BaseClass { protected int _x=100; protected int _y=150; public abstract void AbstractMethod(); public abstract int X {get;} public abstract int Y {get;} //静态成员不能标记为abstract //public static abstract void StaticMethod(); } class DerivedClass:BaseClass { public override void AbstractMethod() { _x++; _y++; } public override int X{ get{return _x+10;}} public override int Y{get{return _y+10;}} public static void Main() { DerivedClass c=new DerivedClass(); c.AbstractMethod(); Console.WriteLine("x = {0}, y = {1}", c.X, c.Y); Console.WriteLine(); Console.WriteLine("Press Enter to close this window."); Console.ReadLine(); } }