一、設計模式 1、工廠模式 public class JiSuan { private int a; public int A { get { return a; } set { a = value; } } private int b; public int B { get { return b; ...
一、設計模式
1、工廠模式
public class JiSuan { private int a; public int A { get { return a; } set { a = value; } } private int b; public int B { get { return b; } set { b = value; } } public virtual int YunSuan() { return 0; } } //加法類 public class Jia:JiSuan { public override int YunSuan() { return base.A + base.B; } } //減法類 public class Jian : JiSuan { public override int YunSuan() { return base.A - base.B; } } //工廠類 public class GongChang { public static JiSuan DuiXiang(string s) { switch(s) { case "+": return new Jia(); break; case "-": return new Jian(); break; case "*": return new Cheng(); break; default: return new Jia(); break; } } }View Code
2、單例模式
class DBDA { //建變數 public string host; public string database; //靜態成員,用來存儲該類的對象 public static DBDA db = null; //構造方法 讓該類不能被實例化 private DBDA() { } //提供一個造對象的方法,控制只能造一個對象 public static DBDA DuiXiang() //因為不能造對象所以用static { if (db == null) { db = new DBDA(); } return db; } } class Program { static void Main(string[] args) { DBDA db = DBDA.DuiXiang(); db.host = "localhost"; DBDA db1 = DBDA.DuiXiang(); Console.WriteLine(db1.host); Console.ReadLine(); }View Code
二、委托
也稱為代理,事件也是一種委托,定義在類的最外面。
1、定義委托
關鍵字:delegate
函數簽名:簽名和函數保持一致 (函數簽名指返回類型和參數列表:例上面程式2中的void和string s)
定義委托的時候要根據函數來定義
public delegate int First(int a,int b);
指向的方法的返回類型,需要參數必須一致!
2、定義委托變數,指向方法
委托不能被實例化,因為不是類
First f = new JiaFa().JiaFa; //新建委托變數,指向方法,註意!!方法不需要小括弧!!
第二次可以使用+=
public int JiaFa(int a,int b)
{
return a+b;
}
調用: f(5,3);
可以理解為函數的指針,委托指向哪個函數,則這個委托就代表哪個函數
可以讓函數當做參數一樣進行傳遞
//定義委托 public delegate void SuiBian(string s); class Program { static void Main(string[] args) { //委托 //把方法參數化 SuiBian s = China; s += America; //+=是綁定方法,將兩個委托的調用列表連接在一起 -=去掉一個方法 =是替換 //調用語音方法 Speak(s); Console.WriteLine(); Console.ReadLine(); } //語音功能的方法 static void Speak(SuiBian yu) { yu("張三"); //if (n == 0) //{ // America(); //} //else if (n == 1) //{ // China(); //} //else if (n == 2) //{ // HanYu(); //} //America(); //China(); } //語音包 public static void America(string s) { Console.WriteLine(s+"hello"); } static void China(string s) { Console.WriteLine(s+"你好"); } static void HanYu(string s) { Console.WriteLine(s+"bjdkaj"); } }View Code
※事件
事件就是一種特殊的委托