所謂c#的委托就是說把函數當參數來傳遞。
這個在js完全就用不著搞什么委托東西,直接轉就是了。而對于C#來說則不是這樣!
一個函數,如果它的參數是函數,那么是這樣子寫的 :
public void method(Action<string, Int32> voidMethod, Func<string, Int32> returnMethod)Action<string, Int32> voidMethod
意思是說這個將被傳進來的函數是一個沒有return的函數,就是public void, 它需要一個str參數
(這里提一下,js中每個函數都是return的即使你沒有寫,它也會return undefiend)
Func<string, Int32> returnMethod
意思是說這個函數是一個有return的函數,最后一個參數Int32代表了它的return是一個Int32 , 就是 public Int32啦, 那么除了最后一個參數其余的都是這個函數所需要的參數了
那么如何調用呢?
method(delegate(string a, string b, Int32 c){ //do something }, delegate(string a, string b){ //do something return 5;});
這里使用的是匿名函數delegate(){},這個比較習慣,因為js大多數會用匿名函數的。
當然,如果你硬是喜歡用老式的寫法,也可以寫比較傳統的:
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; //這里可以指向某個方法,不是一定要寫 delegate method(xx, yy);
委托是很好用的,比如我對進去的匿名函數也可以引用到作用域上的變量,這個和js是一樣的!
把它當js來寫,我覺得這樣非常好!
新聞熱點
疑難解答