本文主要講述 interface 、 virtual 、 abstract、override、new(修飾符) 的使用方法和區別。 interface interface 只能包含方法、屬性、事件和索引,實現接口的類必須實現接口成員。只提供一些方法規約,不提供主體,不能用 public 、 abstract 等修飾。請看實例: [csharp] interface IAnimal { void Eat(); void Run(); void Play(); } class Dog:IAnimal { public void Eat() { // Eat Console.WriteLine("Your dog is eating"); } public void Run() { // Run Console.WriteLine("Your dog is running"); } public void Play() { // Play Console.WriteLine("Your dog is playing"); } static void Main(string[] args) { // 聲明一個接口實例 IAnimal animal = new Dog(); // 調用接口成員 animal.Eat(); } } 一個接口可以從一個或多個基接口繼承。再重申下interface 和 abstract 兩者之間的區別: 1.interface 不能包含方法實現,abstract class可以包含也可以不包含。 2.interface只能繼承interface,abstract class可以繼承class或者一個或多個interface 3.interface不能包含字段,可以包含屬性,abstract class 都可以包含 4.interface不能包含構造和析構函數, abstract class都可以 5.interface支持多繼承,abstract class不支持多繼承 abstract abstract 關鍵字用來修飾方法、類、屬性、索引和事件聲明,標記為 abstract 的抽象類的成員必須通過抽象類的派生類來實現。這裡之前說過 abstract 就不說了,給個地址 :http://blog.csdn.net/ywy0012011/article/details/8167161。 virtual virtual 關鍵字用來修飾方法、屬性、索引和事件聲明,使它們在子類中可以被重寫。 靜態屬性使用 virtual 是錯誤的。通過使用 override 屬性聲明,可以在派生類中重寫虛擬繼承屬性。 override override 提供從基類繼承的成員實現。不能重寫非虛方法或靜態方法,重寫的基類方法必須有 virtual 、 abstract 或 override 修飾的。override 聲明不能更改 virtual 方法的可訪問性。override 方法和 virtual 方法必須具有相同的訪問級別修飾符。 new (修飾符) new 關鍵字可以顯示隱藏從基類繼承的成員。 一般方法,若在派生類中重寫,須使用new關鍵字。new 和 override 的區別,即重寫和隱藏的區別: new 的用法: [csharp] class Circle : Shape { // 隱藏字段 'x' new public static int x = 100; static void Main() { // 顯示 x 新的值 Console.WriteLine(x); // 顯示 x 的隱藏值 Console.WriteLine(Shape.x); // 顯示非隱藏的值 y Console.WriteLine(y); } } /* Output: 100 22 55 */ override 用法 [csharp] abstract class ShapesClass { abstract public int Area(); } class Square : ShapesClass { int side = 0; public Square(int n) { side = n; } public override int Area() { return side * side; } static void Main() { www.2cto.com Square sq = new Square(12); Console.WriteLine("Area of the square = {0}", sq.Area()); } } /* Output: Area of the square =144 */ abstract和virtual 的區別: 1: Abstract方法只能在抽象類中聲明,虛方法則不是。 Abstract方法必須在派生類中重寫,而virtual則不必(可以override也可以不用override) 2: Abstract方法不能聲明方法實體, abstract public void SD(); 虛方法則可以 3. abstract,virtual在實現過程中需要用到new 和 override,而interface則不用