熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

編程中如何選擇Class, Abstract Class and&n

2022-06-13   來源: .NET編程 
     本文面向的讀者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 Class public 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而不是InterfaceInterface的主要缺點是靈活性比較差一旦你定義好了Interface那麼它的Members就固定了如果你要對已經發布的程序添加新的Method就會破壞你已經的實現該接口的Type(ClassStruct等)因為你必須在你已有的Type中實現新的方法否則你的程序將無法通過編譯

  

  例如類Car和Train實現了接口Vehicles 現在我們要給接口Vehicles再加一個方法Brake() 如果我們現在編譯類Car和Train編譯器將報錯

  

  public interface Vehicles { … //新添加的方法 void Brake(); } 要修復這個錯誤我們不得不在類Car和Train中實現方法Brake() 示范代碼如下 public class Car : Vehicles { … public void Brake() { SystemConsoleWriteLine(Stop your car); } } public class Train : Vehicles { … public void Brake() { SystemConsoleWriteLine(Stop your train); } }

  如果我們使用抽象類或正常類Vehicles我們僅僅需要在類Vehicles中添加Brake()方法並且實現這個方法然後我們根據具體需要來決定是否要覆蓋類Car 或Train中的Brake()方法

  

  public abstract class Vehicles { … //新添加的方法無需在它的子類中覆蓋這個方法 public void Brake() { SystemConsoleWriteLine(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


From:http://tw.wingwit.com/Article/program/net/201311/12850.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.