1. 程式人生 > >.Net高階技術:對多型的深入理解

.Net高階技術:對多型的深入理解

一、C#多型的特性使得設計模式成為可能

  二十多種設計模式的都是基於多型

二、多型的表現形式

  1.普通類

   子類能夠繼承父類的所有成員(父類的私有成員子類物件不能直接訪問到),包括父類實現的介面已經父類繼承的其他類的成員。

   將方法標記為virtual,表示子類可以重寫這個方法(當然也可以不重寫);

   將方法標記為sealed,表示子類不允許重寫這個方法; 

   特性:隔代繼承,子類物件能訪問父類所有的非私有成員;

  2.抽象類

   可以有實現的成員,也可以有非實現的成員;

   可以有virtual方法,子類可以重寫,也可以不重寫;

   標記為abstruct的成語必須被子類重寫(如果子類也是抽象類可以不重寫);

    一個類只要有一個struct成員,那麼這個類一定要是抽象類;

   特點:將子類共有的方法加以實現,將非共有的方法標記為abstract方法,以供子類重寫

  3.介面

   不能有任何實現的成員,可以有屬性(屬性的本質是方法),所有的成員方法都是abstract;

   特點:所有實現這個介面的實現類都可以被“介面物件”指向,每個實現了介面的類的物件都會有介面定義抽象方法的實現,實現統一排程

      (與委託類似,委託例項物件呼叫的時候,並不清楚具體呼叫的是哪一個方法);

三、面向介面程式設計的例項:

FTP地址、使用者名稱、密碼要儲存到一個地方,配置提供者就提供了一個儲存、讀取配置的一些類
資料配置提供者介面:
public interface ISettingsProvider
{
string this[string name] { get; set; }//以字串型別讀取、設定配置項的值
string[] Names{get;}//所有配置名
bool NameExists(string name);//判斷指定名字的配置是否存在
}

//實現這個介面的配置操作可以有多重:檔案讀取寫入,資料庫讀取寫入