1、C#多態的特性使得設計模式成爲可能數據庫
二十多種設計模式的都是基於多態編程
2、多態的表現形式設計模式
1.普通類ide
子類可以繼承父類的全部成員(父類的私有成員子類對象不能直接訪問到),包括父類實現的接口已經父類繼承的其餘類的成員。this
將方法標記爲virtual,表示子類能夠重寫這個方法(固然也能夠不重寫);設計
將方法標記爲sealed,表示子類不容許重寫這個方法; 對象
特性:隔代繼承,子類對象能訪問父類全部的非私有成員;繼承
2.抽象類接口
能夠有實現的成員,也能夠有非實現的成員;字符串
能夠有virtual方法,子類能夠重寫,也能夠不重寫;
標記爲abstruct的成語必須被子類重寫(若是子類也是抽象類能夠不重寫);
一個類只要有一個struct成員,那麼這個類必定要是抽象類;
特色:將子類共有的方法加以實現,將非共有的方法標記爲abstract方法,以供子類重寫
3.接口
不能有任何實現的成員,能夠有屬性(屬性的本質是方法),全部的成員方法都是abstract;
特色:全部實現這個接口的實現類均可以被「接口對象」指向,每一個實現了接口的類的對象都會有接口定義抽象方法的實現,實現統一調度
(與委託相似,委託實例對象調用的時候,並不清楚具體調用的是哪個方法);
接口
3、面向接口編程的實例:
FTP地址、用戶名、密碼要保存到一個地方,配置提供者就提供了一個保存、讀取配置的一些類
數據配置提供者接口:
public interface ISettingsProvider
{
string this[string name] { get; set; }//以字符串類型讀取、設置配置項的值
string[] Names{get;}//全部配置名
bool NameExists(string name);//判斷指定名字的配置是否存在
}
//實現這個接口的配置操做能夠有多重:文件讀取寫入,數據庫讀取寫入
4、設計模式
1.模板設計模式:
class Program
{
static void Main(string[] args)
{
Person p = new Student();
p.Play();
Console.ReadKey();
}
}
//模板父類的實現
abstract class Person
{
//子類共同繼承的方法
public void Play()
{
for (int i = 0; i < 3; i++)
{
//步驟已經實現好,具體的實現由子類完成
SayHello();
Run();
Jump();
}
}
//要求子類寫本身的實現
public abstract void SayHello();
public abstract void Run();
public abstract void Jump();
}
class Student : Person
{
public override void SayHello()
{
Console.WriteLine("學生打招呼");
}
public override void Run()
{
Console.WriteLine("學生跑");
}
public override void Jump()
{
Console.WriteLine("學生跳");
}
}
抽象類和接口的最大區別:接口是公共的行爲規範,抽象類是公共的實現。