委托重载和使用
重新整理一下,趁著現在項目有時間,還有那些語法糖,哎,最二了!
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
? ??委托是一種定義方法簽名的類型。?當實例化委托時,您可以將其實例與任何具有兼容簽名的方法相關聯。?您可以通過委托實例調用方法。
? ? 委托用于將方法作為參數傳遞給其他方法。?事件處理程序就是通過委托調用的方法。?您可以創建一個自定義方法,當發生特定事件時某個類(例如 Windows 控件)就可以調用您的方法。?
委托具有以下特點:
-
委托類似于 C++ 函數指針,但它們是類型安全的。
-
委托允許將方法作為參數進行傳遞。
-
委托可用于定義回調方法。
-
委托可以鏈接在一起;例如,可以對一個事件調用多個方法。
-
方法不必與委托簽名完全匹配。?
-
C# 2.0 版引入了匿名方法的概念,此類方法允許將代碼塊作為參數傳遞,以代替單獨定義的方法。
-
?C# 3.0 引入了 Lambda 表達式,利用它們可以更簡練地編寫內聯代碼塊。?匿名方法和 Lambda 表達式(在某些上下文中)都可編譯為委托類型。?這些功能統稱為匿名函數。?有關 lambda 表達式的更多信息,請參見?匿名函數(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);//有參數的 testDelegate.Demo2(Test1);testDelegate.Demo3(Test1);testDelegate.Demo4(Test);//沒有參數的 }public void Test(){}public void Test(int a){//隨便寫 }public string Test1(int a, string b){return string.Empty;}}?
轉載于:https://www.cnblogs.com/wucaifang/p/4589131.html
總結
- 上一篇: druid之监控设置及问题小记
- 下一篇: Find Minimum in Rota