委托重载和使用
重新整理一下,趁著現(xiàn)在項目有時間,還有那些語法糖,哎,最二了!
MSDN的解釋:https://msdn.microsoft.com/zh-cn/library/vstudio/ms173171(v=vs.110).aspx
namespace GXProjectTest.Lambda {/*委托*/public class TestDelegate{public void Demo1(Test<int> test){if (test != null)test(1);}public string Demo2(Test<int, string, string> test){if (test != null){return test(1, "sss");}return string.Empty;}public string Demo3(TestStr<int, string, string> tt){if (tt != null)return tt(1, "");return string.Empty;}public void Demo4(Test t){if (t != null)t();}}public delegate void Test();public delegate void Test<in T>(int a);public delegate string Test<in T1, in T2, out TResult>(int a, string b);public delegate string TestStr();public delegate string TestStr<in T>(int a);public delegate string TestStr<in T1, in T2, out TResult>(int a, string b); }
MSDN的解釋:https://msdn.microsoft.com/zh-cn/library/vstudio/ms173171(v=vs.110).aspx
? ??委托是一種定義方法簽名的類型。?當(dāng)實例化委托時,您可以將其實例與任何具有兼容簽名的方法相關(guān)聯(lián)。?您可以通過委托實例調(diào)用方法。
? ? 委托用于將方法作為參數(shù)傳遞給其他方法。?事件處理程序就是通過委托調(diào)用的方法。?您可以創(chuàng)建一個自定義方法,當(dāng)發(fā)生特定事件時某個類(例如 Windows 控件)就可以調(diào)用您的方法。?
委托具有以下特點:
-
委托類似于 C++ 函數(shù)指針,但它們是類型安全的。
-
委托允許將方法作為參數(shù)進行傳遞。
-
委托可用于定義回調(diào)方法。
-
委托可以鏈接在一起;例如,可以對一個事件調(diào)用多個方法。
-
方法不必與委托簽名完全匹配。?
-
C# 2.0 版引入了匿名方法的概念,此類方法允許將代碼塊作為參數(shù)傳遞,以代替單獨定義的方法。
-
?C# 3.0 引入了 Lambda 表達式,利用它們可以更簡練地編寫內(nèi)聯(lián)代碼塊。?匿名方法和 Lambda 表達式(在某些上下文中)都可編譯為委托類型。?這些功能統(tǒng)稱為匿名函數(shù)。?有關(guān) lambda 表達式的更多信息,請參見?匿名函數(shù)(C# 編程指南)。
namespace GXProjectTest.Lambda {/*委托*/public class TestDelegate{public void Demo1(Test<int> test){if (test != null)test(1);}public string Demo2(Test<int, string, string> test){if (test != null){return test(1, "sss");}return string.Empty;}public string Demo3(TestStr<int, string, string> tt){if (tt != null)return tt(1, "");return string.Empty;}public void Demo4(Test t){if (t != null)t();}}public delegate void Test();public delegate void Test<in T>(int a);public delegate string Test<in T1, in T2, out TResult>(int a, string b);public delegate string TestStr();public delegate string TestStr<in T>(int a);public delegate string TestStr<in T1, in T2, out TResult>(int a, string b); }
測試代碼
public partial class TestDelegateWeb : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){//測試 TestDelegate testDelegate = new TestDelegate();testDelegate.Demo1(Test);//有參數(shù)的 testDelegate.Demo2(Test1);testDelegate.Demo3(Test1);testDelegate.Demo4(Test);//沒有參數(shù)的 }public void Test(){}public void Test(int a){//隨便寫 }public string Test1(int a, string b){return string.Empty;}}?
轉(zhuǎn)載于:https://www.cnblogs.com/wucaifang/p/4589131.html
總結(jié)
- 上一篇: druid之监控设置及问题小记
- 下一篇: Find Minimum in Rota