C# 匿名函數 詳解


匿名函數的定義和用途

匿名函數是一個“內聯”語句或表達式,可在需要委托類型的任何地方使用。

可以使用匿名函數來初始化命名委托[無需取名字的委托],或傳遞命名委托(而不是命名委托類型,傳遞一個方法塊,而不是委托類型[callback的方式]作為方法參數。

兩種匿名函數

共有兩種匿名函數,以下主題分別討論了這些函數

C#委托的發展

C# 1.0

在 C# 1.0 中,您通過使用在代碼中其他位置定義的方法顯式初始化委托來創建委托的實例。

C# 2.0

C# 2.0 引入了匿名方法的概念,作為一種編寫可在委托調用中執行的未命名內聯語句塊的方式。

C# 3.0

C# 3.0 引入了 Lambda 表達式,這種表達式與匿名方法的概念類似,但更具表現力並且更簡練。 這兩個功能統稱為“匿名函數”。

通常,針對 .NET Framework 版本 3.5 及更高版本的應用程序應使用 Lambda 表達式。

從 C# 1.0 到 C# 3.0委托示例

下面的示例演示了從 C# 1.0 到 C# 3.0 委托創建過程的發展:

/// <summary>
    /// C# 1.0 - 3.0 委托的發展過程
    /// </summary>
    public class DelegateEvlove
    {
        //方法1 定義委托
        public delegate void TestDelegate(string s);

        static void ConsoleStr(string s)
        {
            Console.WriteLine(s);
        }

        public static void Main(string[] args)
        {
            //方法1 實例化委托
            TestDelegate iDelegate = new TestDelegate(ConsoleStr);
            //方法1 調用委托
            iDelegate("1 instance delgate");

            //方法2 匿名委托
            TestDelegate aDelegate = delegate(string s) { Console.WriteLine(s); };
            aDelegate("2 anonymous delegate");

            //方法3 lambda 表達式
            TestDelegate lDelegate = (s) => { Console.WriteLine(s); };
            lDelegate("3 lambda delegate");

        }
    }

Unity支持C#3.0的lambda

在Unity中可以使用C# 3.0的lambda表達式特性來書寫委托,它是完全支持的!

//類似這樣的寫法
CommUIAnim(() => { NextBattle.SetActive(false); },args)

void CommUIAnim(Action callback,object[] args)
{
   if(callback!=null)
      callback();
}

MSDN委托文檔

更加詳細的內容,請瀏覽MSDN:http://msdn.microsoft.com/zh-cn/library/bb882516.aspx


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM