1. 抽象類和抽象函數
- C#中使用abstract關鍵字,將類和函數聲明為抽象類或抽象函數
- 抽象類不能實例化,抽象函數沒有執行代碼,必須在非抽象的派生類中重寫
- 抽象函數是虛擬的,但不需要提供virtual關鍵字,否則會報錯
- 如果類包含抽象函受,該類將也是抽象的,也必須聲明為抽象的
abstract class MyAbstract
{
// 變量的定義不適用abstract關鍵字
private int i;
// 屬性
public abstract int count { get; set; }
// 方法
public abstract string getName();
}
2. 密封類和密封方法
- C#中使用關鍵字sealed,將類和方法聲明為密封類或者密封方法
- 對於密封類來說,表示不能繼承該類;對於密封方法來說,表示不能重寫該方法
- 密封類不能作為基類被繼承,但它可以繼承別的類或借口
- 在密封類中不能聲明受保護成員或虛成員,因為受保護成員只能從派生類進行訪問,而虛成員只能在派生類中重寫
- 由於密封類的不可繼承性,因此密封類不能聲明為抽象的,即sealed修飾符不能與abstract修飾符同時使用
1 public sealed class myClass //聲明密封類 2 { 3 public int = 0; 4 public void method() 5 { 6 Console.WriteLine("密封類"); 7 } 8 }
- 並不是每個方法都可以聲明為密封方法,密封方法只能用於對基類的虛方法進行實現並提供具體的實現,所以,聲明密封方法時,sealed總是和override同時使用
using System; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { MyClass2 test = new MyClass2(); test.Method(); } } public class MyClass1 { public virtual void Method() { Console.WriteLine("基類中的虛方法"); Console.ReadLine(); } } public sealed class MyClass2:MyClass1 { public sealed override void Method() { base.Method(); Console.WriteLine("密封類中重寫后的方法"); } } }