安全、高速、放心的軟件下載

編程中如何選擇Class, Abstract Class and Interface

時間:2019-05-21 09:21:01來源:www.iimmyzlw.icu人氣:0
歡迎進入.NET社區論壇,與200萬技術人員互動交流 >>進入     本文面向的讀者:.NET 應用程序設計師和程序員 關鍵字: Type– 類型 Class - 類 Abstract - 抽象的 Interface - 接口 Member - 成員 Method - 方法 Property - 屬性 預備知識:在閱讀本文時,您應當了解.NET編程的基本知識并且已經掌握Class, Abstract Class 和 Interface全部知識。這里我僅簡單介紹一下他們的基本知識。本文的例子由C#編寫。期望您對C#編程有一定的了解。 正文: 我們無法創建一個Abstract Class或Interface的實例(INSTANCE)。讓我們從Abstract Class和Interface的定義來看他們的不同。Abstract Class可以包含Abstract Methods 和 Abstract Properties, 也可以包含其他的Members,象正常的Class一樣。而Interface只能包含Abstract Methods和Properties(屬性)。Interface中的所有Methods和Properties不需要加Abstract和Public關鍵字,因為這兩個關鍵字在Interface中是默認的。舉例如下: //Abstarct Classpublic abstract class Vehicles { private int noOfWheel; private string color; public abstract string Engine { get; set; } public abstract void Accelerator(); } //Interface public interface Vehicles { string Engine { get; set; } void Accelerator(); }通常來講,在設計時優先考慮使用Class或Abstract Class而不是Interface。Interface的主要缺點是靈活性比較差。一旦你定義好了Interface,那么它的Members就固定了。如果你要對已經發布的程序添加新的Method,就會破壞你已經的實現該接口的Type(Class,Struct等)。因為你必須在你已有的Type中實現新的方法,否則你的程序將無法通過編譯。 例如類Car和Train實現了接口Vehicles. 現在我們要給接口Vehicles再加一個方法Brake(). 如果我們現在編譯類Car和Train,編譯器將報錯。 public interface Vehicles { … //新添加的方法 void Brake(); }要修復這個錯誤,我們不得不在類Car和Train中實現方法Brake(). 示范代碼如下:public class Car : Vehicles{ … public void Brake() { System.Console.WriteLine(Stop your car”); }} public class Train : Vehicles{ … public void Brake() { System.Console.WriteLine(Stop your train”); }} 進入 如果我們使用抽象類或正常類Vehicles,我們僅僅需要在類Vehicles中添加Brake()方法并且實現這個方法。然后我們根據具體需要來決定是否要覆蓋類Car 或Train中的Brake()方法。 public abstract class Vehicles { … //新添加的方法,無需在它的子類中覆蓋這個方法。 public void Brake() { System.Console.WriteLine(Stop your vehicles”); } }Class則可以提供更好的靈活性。你可以給Class添加任何Members,只要添加的不是Abstract Method即可(也就是說你要提供一個有具體實現的方法)。這樣就不會影響從該Class繼承的類,已有代碼無需做任何改變。 設計原則 • 優先考慮使用Class或Abstract Class而不是Interface。 • 使用Abstract Class代替Interface來降低Class繼承層次之間的耦合關系。 • 使用Interface,如果你需要給一個值類型實現(Value Type, 象STRUCT就是值類型)多態繼承(Polymorphic Hierarchy)。(值類型除了從Interface繼承以外,不能從其他Type繼承)。 • 在需要多重繼承的情況下,可以考慮使用Interface。
標簽編程
網友評論
刮刮乐怎么做