C 基礎 Func和Action學習

2021-12-29 21:03:45 字數 3211 閱讀 1192

委託

委託的那些事

關於委託的基本定義,在很久之前的這篇文章中,有個簡單的介紹。稍微回顧一下。

委託是c#中型別安全的,可以訂閱乙個或多個具有相同簽名方法的函式指標

宣告委託的方式:delegate 返回值型別 委託型別名(引數)

例如:1  delegate void say(string strcontent);

如果想使用該委託,需要乙個對應的方法。

複製**

1  ///

2 /// 委託對應方法

3 ///

4 ///

5 private static void chinesesay(string strcontent)

6 複製**

簡單的呼叫:

複製**

1         static void main(string args)

2        

複製**

上面介紹了,平時用委託的一般方式,先宣告委託,然後再去使用,有點麻煩,.net中有已經定義好的委託型別,可以拿來直接用。

action

action委託有兩種方式:無引數無返回值的委託,有至少乙個最多16個的引數無返回值的泛型委託。

1     // 摘要: 

2     //     封裝乙個方法,該方法不具有引數並且不返回值。

3     [typeforwardedfrom("system.core, version=3.5.0.0, culture=neutral, publickeytoken=b77a5c561934e089")]

4     public delegate void action();

action泛型委託根據輸入引數個數的不同,action委託有十六個過載  

用action改寫上面的例子,上面的例子中委託是無返回值有string型別的輸入引數,所以使用action的泛型版本。

複製**

1     class program

2     歲了", s);//方式三

8             sayhello("您好");

9             sayname.invoke("我叫wolfy");

10             iasyncresult result = sayage.begininvoke("27", callback, "愛好女");

11             if (result.iscompleted)

12            

15             console.read();

16         }

17 18         private static void callback(iasyncresult ar)

19         ,我不搞基",ar.asyncstate.tostring());

21         }

22         ///

23         /// 委託對應方法

24         ///

25         ///

26         private static void chinesesay(string strcontent)

27        

30     }  

上面**中,列出了action泛型委託的使用方式,以及使用lambda的方式,action也可以使用匿名方法,選擇一種自己上手的來用即可。

func

如果要用有輸入引數,有返回值的委託,那麼func委託將滿足你的要求。

func泛型委託,可以沒有輸入引數,但必須有返回值。根據輸入引數的多少有17個過載。  

in:輸入引數

out:輸出引數,也就是返回值。

乙個案例

輸入名字,年齡,性別,對年齡,性別,姓名進行修改後輸出。

複製**

1     public class person

2    

4         public int age

5         public bool gender

6         ///

7         /// 重寫tostring方法,方便輸出結果

8         ///

9         ///

10         public override string tostring()

11        

14     }

15     class program

16     ;//lambda表示式方式

22             func funupdatename = delegate(person p2)//匿名方法

23             ;

27             person p = new person() ;

28             person result = funcupdateage(p);

29             console.writeline(result.tostring());

30             console.writeline(funcupdategender(p).tostring());

31             console.writeline(funupdatename(p).tostring());

32             console.read();

33         }

34         static person updateage(person p)

35        

39 40     }  

func泛型委託,可以沒有輸入引數,但是必須有輸出引數。 總結

action:無引數無返回值委託。

action:泛型委託,無返回值,根據輸入引數的個數不同有十六個過載。

func< out t>:無輸入引數,有返回值。

func:有輸入引數,有返回值,根據輸入引數個數不同,有十六個過載。

action和func中可以使用lambda和匿名方法處理方法體內邏輯。

(天太熱,人很躁,在你不知道做什麼的時候,不如靜下來對基礎進行查漏補缺,能掌握一點是一點,別總抱怨,總煩躁,就算你抱怨,煩躁,最後該完成的事還是你的,不多不減就在那裡,夏天這天氣,太煩躁,啥事都不做了嗎?難道敲**不是一件開心的事嗎?)

C 基礎 Func和Action學習

委託 action func 總結委託的那些事 關於委託的基本定義,在很久之前的這篇文章中,有個簡單的介紹。稍微回顧一下。委託是c 中型別安全的,可以訂閱乙個或多個具有相同簽名方法的函式指標 宣告委託的方式 delegate 返回值型別 委託型別名 引數 例如 1 delegate void say...

c 中Action和Func委託

泛型acion委託表示引用乙個void返回型別的方法,至多可以傳遞至16個引數型別,沒有泛型的action類可呼叫沒有引數的方法,如 class test static void main string args 泛型func委託表示引用帶返回型別的方法,至多可以傳遞16個引數型別和乙個返回型別,f...

C 委託變數Action和Func

c 中的委託 簡單來說,使用委託可以將多個方法繫結到同乙個委託變數,當呼叫此變數時,可以依次呼叫所有方法。action委託 1.action a printstring action可以指向乙個沒有返回值,也沒有引數的方法。actiona printstring action 還可以接受沒有返回值,...