委托的概念
委托是一種特殊的類型,可以保存方法
delegate RetType DelegateName(Type1 name1, Type2 name2);
關鍵字 delegate 用來定義委托狐肢,也翻譯成代理
委托是一種類型添吗,與 class 的地位是對等的
定義委托類型的變量
DelegateName myDelegation = new DelegateName(SomeMethod);
// 或者簡寫為
DelegateName myDelegation = SomeMethod;
可以賦予的變量是滿足代理定義的方法,要求返回值和參數(shù)列表都一樣
使用委托
很多時候份名,我們需要依情況調用不同的方法碟联。傳統(tǒng)思路是采用 if 判斷,分支是比較拖效率的操作僵腺。
例子:分子結構模擬
在化學中鲤孵,分子相互作用力有不同的勢函數(shù)模型,這些函數(shù)的輸入輸出類型完全相同辰如,僅計算過程不同
程序運行前普监,需要手動配置使用哪種勢函數(shù)模型,程序運行時琉兜,勢函數(shù)不會改變
一次模擬至少需要調用 1 億次勢函數(shù)
在化學領域拍皮,勢函數(shù)模型還在不斷更新虚缎,甚至有研究人員在做創(chuàng)新實驗
使用委托
前提:有一組返回值以及參數(shù)類型都相同的方法
double Add(double a, double b)
double Subtract(double a, double b)
double Multiply(double a, double b)
定義一個委托,保證返回值與參數(shù)類型都匹配
delegate double SuperComputer(double a, double b)
定義委托類型的變量
SuperComputer sc = Add;
SuperComputer su = SomeClass.Subtract;
SuperComputer so = obj.Multiply;
委托會受制于訪問修飾符,但是不限制來自于哪個類慰技、哪個對象为黎,也可以是 static 方法装盯。僅需要方法返回值以及參數(shù)類型都相同县钥。