abstract 修飾符可以和類、方法、屬性、索引器及事件一起使用。在類聲明中使用abstract修飾符以指示某個類只能是其他類的對象,這個基類被稱爲抽象類。抽象類本身無法產生實例對象,而且抽象類包含了一個以上的抽象方法,這些方法只是提供函數名稱,並沒有定義如何實現,由繼承的派生類同時必須實現所有抽象類的方法,否則其本身將成爲另外一個抽象類。當派生類重寫抽象類的方法時,要使用override關鍵字來重寫抽象類所定義的方法。抽象類與非抽象類在以下方面是不同。
1.抽象類不能直接實例化,並且對抽象類使用new運算符是編譯時錯誤,雖然一些變量和值在編譯時的類型可以是抽象的。但這樣的變量必須或者爲Null,或者含有對非抽象類的實例的引用(此非抽象類是從抽象類派生的)。
2.允許(但不要求)抽象類包含抽象成員
3.抽象類不能被密封。
4.抽象類可以包含抽象方法和訪問器。
5.一個派生於抽象類的非抽象類必須包含所有的繼承抽象方法和訪問器的實現。
using System;
namespace CH
{
public abstract class Person
{
private string name;
private int age;
public string Name
{
get{return name;}
set{name=value;}
}
public int Age
{
get{return age;}
set{age=value;}
}
public abstract void ShowInfo(); //抽象方法
}
public class Student:Person
{
public override void ShowInfo() //重寫抽象類中的抽象方法
{
Console.Writeline("name:{0}\t age:{1}",Name,Age);
}
}
class Programe
{
static void Main(string[] args)
{
Student student=new Student(); //實例化抽象類
Person person=student; //使用派生類對象實例化抽象類
person.Name="jack"; //使用抽象類對象訪問抽象類中的name屬性
person.Age=20;
person.ShowInfo();
}
}
}
抽象方法主要有以下特徵:
一個抽象方法可以看作是一個虛函數。
抽象方法的聲明只能在抽象類中。
抽象方法聲明只提供一個實現的方式,沒有方法體。
方法體的實現被重寫方法提供,重寫方法是一個非抽象類的成員。
抽象屬性的行爲和抽象方法相似,除了不同的聲明形式。
在一個靜態屬性中使用abstract是錯誤的。
一個抽象屬性能夠通過派生類使用override實現。