.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);//判斷指定名字的配置是否存在
}
//實現這個介面的配置操作可以有多重:檔案讀取寫入,資料庫讀取寫入