C#委托delegate實(shí)例解析
所謂c#的委托就是說把函數(shù)當(dāng)參數(shù)來傳遞。
這個(gè)在js完全就用不著搞什么委托東西,直接轉(zhuǎn)就是了。而對(duì)于C#來說則不是這樣!
一個(gè)函數(shù),如果它的參數(shù)是函數(shù),那么是這樣子寫的 :
public void method(Action<string, Int32> voidMethod, Func<string, Int32> returnMethod) Action<string, Int32> voidMethod
意思是說這個(gè)將被傳進(jìn)來的函數(shù)是一個(gè)沒有return的函數(shù),就是public void, 它需要一個(gè)str參數(shù)
(這里提一下,js中每個(gè)函數(shù)都是return的即使你沒有寫,它也會(huì)return undefiend)
Func<string, Int32> returnMethod
意思是說這個(gè)函數(shù)是一個(gè)有return的函數(shù),最后一個(gè)參數(shù)Int32代表了它的return是一個(gè)Int32 , 就是 public Int32啦, 那么除了最后一個(gè)參數(shù)其余的都是這個(gè)函數(shù)所需要的參數(shù)了
那么如何調(diào)用呢?
method(delegate(string a, string b, Int32 c)
{
//do something
}, delegate(string a, string b)
{
//do something
return 5;
});
這里使用的是匿名函數(shù)delegate(){},這個(gè)比較習(xí)慣,因?yàn)閖s大多數(shù)會(huì)用匿名函數(shù)的。
當(dāng)然,如果你硬是喜歡用老式的寫法,也可以寫比較傳統(tǒng)的:
public void method(tuoguan voidMethod, tuoguan2 returnMethod) //這里不可以在寫 Action or Func了
{
Int32 i = returnMethod("b");
voidMethod("b");
}
public delegate void tuoguan(string name);
public delegate Int32 tuoguan2(string name);
public Int32 returnMethod(string name)
{
return 5;
}
tuoguan xx = delegate(string name)
{
//do somthing
};
tuoguan2 yy = returnMethod; //這里可以指向某個(gè)方法,不是一定要寫 delegate
method(xx, yy);
委托是很好用的,比如我對(duì)進(jìn)去的匿名函數(shù)也可以引用到作用域上的變量,這個(gè)和js是一樣的!
把它當(dāng)js來寫,我覺得這樣非常好!
相關(guān)文章
C#反射實(shí)現(xiàn)插件式開發(fā)的過程詳解
插件式架構(gòu),一種全新的、開放性的、高擴(kuò)展性的架構(gòu)體系,插件式架構(gòu)設(shè)計(jì)好處很多,把擴(kuò)展功能從框架中剝離出來,降低了框架的復(fù)雜度,讓框架更容易實(shí)現(xiàn),這篇文章主要介紹了C#反射實(shí)現(xiàn)插件式開發(fā),需要的朋友可以參考下2023-09-09
C# 如何實(shí)現(xiàn)一個(gè)帶通知的List<T>
這篇文章主要介紹了C# 如何實(shí)現(xiàn)一個(gè)帶通知的List<T>,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-02-02
.Net WInform開發(fā)筆記(五)關(guān)于事件Event
我前面幾篇博客中提到過.net中的事件與Windows事件的區(qū)別,本文討論的是前者,也就是我們代碼中經(jīng)常用到的Event,感興趣的朋友可以了解下2013-01-01
C#實(shí)現(xiàn)關(guān)閉其他程序窗口或進(jìn)程代碼分享
這篇文章主要介紹了C#實(shí)現(xiàn)關(guān)閉其他程序窗口或進(jìn)程代碼分享,本文給出了兩種方法,并分別給出示例代碼,需要的朋友可以參考下2015-06-06

