程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 之抽象類和抽象方法,

C# 之抽象類和抽象方法,

編輯:C#入門知識

C# 之抽象類和抽象方法,


概述:abstract 關鍵字  抽象類不能被實例化,抽象方法不能有方法體,抽象類中的所有抽象方法必須在子類中重寫(override ),一個抽象類可以同時包含抽象方法和非抽象方法。

abstract 修飾符可以和類、方法、屬性、索引器及事件一起使用。

在類聲明中使用 abstract 修飾符以指示類只能是其他類的基類。

抽象類具有以下特性:

  • 抽象類不能實例化。
  • 抽象類可以包含抽象方法和抽象訪問器。
  • 不能用 sealed 修飾符修改抽象類,這意味著該類不能被繼承。
  • 從抽象類派生的非抽象類必須包括繼承的所有抽象方法和抽象訪問器的實實現。

在方法或屬性聲明中使用 abstract 修飾符以指示此方法或屬性不包含實現。

抽象方法具有以下特性:

  • 抽象方法是隱式的 virtual 方法。
  • 只允許在抽象類中使用抽象方法聲明。
  • 因為抽象方法聲明不提供實實現,所以沒有方法體;方法聲明只是以一個分號結束,並且在簽名後沒有大括號 ({ })。例如:
    public abstract void MyMethod();
  • 實現由 overriding 方法提供,它是非抽象類的成員。
  • 在抽象方法聲明中使用 static 或 virtual 修飾符是錯誤的。

除了在聲明和調用語法上不同外,抽象屬性的行為與抽象方法一樣。

  • 在靜態屬性上使用 abstract 修飾符是錯誤的。
  • 在派生類中,通過包括使用 override 修飾符的屬性聲明可以重寫抽象的繼承屬性。

抽象類必須為所有接口成員提供實現。

MSDN中C#語言規范的:10.1.1.1抽象類。此文如下:

abstract 修飾符用於表示所修飾的類是不完整的,並且它只能用作基類。抽象類與非抽象類在以下方面是不同的:

  • 抽象類不能直接實例化,並且對抽象類使用 new 運算符是編譯時錯誤。雖然一些變量和值在編譯時的類型可以是抽象的,但是這樣的變量和值必須或者為 null,或者含有對非抽象類的實例的引用(此非抽象類是從抽象類派生的)。
  • 允許(但不要求)抽象類包含抽象成員。
  • 抽象類不能被密封。

當從抽象類派生非抽象類時,這些非抽象類必須具體實現所繼承的所有抽象成員,從而重寫那些抽象成員。在下面的示例中

abstract class A
 {
 public abstract void F();
 }
 abstract class B: A
 {
 public void G() {}
 }
 class C: B
{
public override void F() {
// actual implementation of F
}
}

抽象類 A 引入抽象方法 F。類 B 引入另一個方法 G,但由於它不提供 F 的實現,B 也必須聲明為抽象類。類 C 重寫 F,並提供一個具體實現。由於 C 中沒有了抽象成員,因此可以(但並非必須)將 C 聲明為非抽象類。

那麼我們什麼時候應該用抽象類呢?
如果一個類設計的目點是用來被其它類繼承的,它代表一類對象的所具有的公共屬性或方法,那個這個類就應該設置為抽象類。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved