首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 2.0 新特性深度解析(十二):泛型匿名方法與 SafeLabel 完整實作

     編輯:關於C語言

泛型匿名方法

匿名方法支援泛型參數,兩種形式:

  1. 使用外部類別泛型參數:
class SomeClass
{
    delegate void SomeDelegate(T t);
    public void InvokeMethod(T t)
    {
        SomeDelegate del = delegate(T item) { /* 使用 item */ };
        del(t);
    }
}
  1. 委派本身為泛型,指定具體型別:
class SomeClass
{
    delegate void SomeDelegate(T t);
    public void InvokeMethod()
    {
        SomeDelegate del = delegate(int number) { MessageBox.Show(number.ToString()); };
        del(3);
    }
}

實戰範例:SafeLabel 完整程式碼

自動處理跨執行緒 Text 存取的標籤控件:

public class SafeLabel : Label
{
    delegate void SetString(string text);
    delegate string GetString();

    public override string Text
    {
        set
        {
            if (InvokeRequired)
            {
                SetString setTextDel = delegate(string text) { base.Text = text; };
                Invoke(setTextDel, new object[] { value });
            }
            else base.Text = value;
        }
        get
        {
            if (InvokeRequired)
            {
                GetString getTextDel = delegate() { return base.Text; };
                return (string)Invoke(getTextDel, null);
            }
            return base.Text;
        }
    }
}

匿名方法捕獲 value/無參數,編譯器自動生成封閉類別封裝外部變數,極度簡化跨執行緒 UI 程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved