【C#复习笔记之抽象类】abstract 08.4.3

    abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。

抽象类具有以下特性:

  • 抽象类不能实例化。他只提供其他类的继承的接口 当然继承类也可以是抽象的 抽象继承类不必全部实现抽象方法,部分实现便可 抽象类可以继承自非抽象类 实例类必须实现抽象方法
     参考自 http://hi.baidu.com/educast/blog/item/9492aec3336f5f51b219a863.html

  • 抽象类可以包含抽象方法和抽象访问器。

  • 不能用 sealed(C# 参考)修饰符修改抽象类,这意味着抽象类不能被继承。

  • 从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。

  • 一个抽象类可以包含abstract方法,也可包含实例化方法,但继承类(非抽象)必须实现abstract方法

在方法或属性声明中使用 abstract 修饰符以指示方法或属性不包含实现。

抽象方法具有以下特性:

  • 抽象方法是隐式的虚方法。

  • 只允许在抽象类中使用抽象方法声明。

  • 因为抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。例如:

    public abstract void MyMethod();
  • 实现由一个重写方法override(C# 参考)提供,此重写方法是非抽象类的一个成员。

  • 在抽象方法声明中使用 staticvirtual 修饰符是错误的。

除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。

  • 在静态属性上使用 abstract 修饰符是错误的。

  • 在派生类中,通过包括使用 override 修饰符的属性声明,可以重写抽象的继承属性。

抽象类必须为所有接口成员提供实现。

实现接口的抽象类可以将接口方法映射到抽象方法上。
例如:

interface I { 
   void M();
}
abstract class C: I 
{   
 public abstract void M();
}
示例:
DerivedClass 类是从抽象类 BaseClass 派生的。抽象类包含一个抽象方法 AbstractMethod 和两个抽象属性 XY
// abstract_keyword.cs//
 Abstract Classesusing 
System;
abstract class BaseClass  
// Abstract class基抽象类
{  
protected int _x = 100;
protected int _y = 150;
public abstract void AbstractMethod();
// Abstract method 定义了连个抽象的属性
public abstract int X { get; }
public abstract int Y { get; }
}
class DerivedClass : BaseClass
{ public override void AbstractMethod()
{
 _x++;        
_y++;
}
public override int X
// overriding property
{ get
{ return _x + 10; }
}
public override int Y
// overriding property   
{
get { return _y + 10; }
}
static void Main()
{        
     DerivedClass o = new DerivedClass(); 
     o.AbstractMethod();      
     Console.WriteLine("x = {0}, y = {1}", o.X, o.Y);  
  }
}

输出

x = 111, y = 161
参考来自 http://blog.csdn.net/dqjqsuperboy/archive/2007/05/31/1633169.aspx
原文地址:https://www.cnblogs.com/barney/p/1135575.html