C#中實現自定義事件的代碼演示

mb78 9年前發布 | 6K 次閱讀 C#

事件是C#中一個重要的內容,MSDN上有一個自定義事件的演示示例。我看了半天有點暈,所以新建了一個winform工程添加了一個按鈕,然后找出調用的程序,一對比做了一個類似的示例,就明白了。看代碼有時候比看文檔來得更快。

using System;

namespace TestEventArgs { /// <summary> /// 這個類對應于EventArgs,做對比學習。 /// 添加兩個內容:info1,info2。 /// </summary> public class MyEventArgs : EventArgs { private String info1; private UInt32 info2;

    public MyEventArgs(String info1, UInt32 info2)
    {
        this.info1 = info1;
        this.info2 = info2;
    }

    public String Info1
    {
        get { return this.info1; }
        set { this.info1 = value; }
    }

    public UInt32 Info2
    {
        get { return this.info2; }
        set { this.info2 = value; }
    }
}

/// <summary>
/// 仿真Button按鈕
/// </summary>
public class MyButton
{
    public delegate void MyEvnetHandler(object sender, MyEventArgs e);
    /// <summary>
    /// 按鈕點擊的次數計數器
    /// </summary>
    public static UInt32 clicked_num = 0;
    public event MyEvnetHandler MyClick;

    public void 觸發()
    {
        MyEventArgs arg = new MyEventArgs(DateTime.UtcNow.ToString(), ++clicked_num);
        MyClick(this, arg);
    }
}

/// <summary>
/// 仿真Form窗體
/// </summary>
public class MyForm
{
    public MyButton 按鈕;
    public MyForm()
    {
        按鈕 = new MyButton();
        按鈕.MyClick += new MyButton.MyEvnetHandler(this.button_Clicked);
    }


    public void button_Clicked(object sender, MyEventArgs e)
    {
        Console.WriteLine("button clicked(sender is:" + sender.ToString() + "; info1 = "
            + e.Info1 + "; info2 = " + e.Info2);
    }
}

class Program
{
    static void Main(string[] args)
    {
        MyForm 窗體 = new MyForm();
        for (int i = 0; i < 10; i++ )
        {
            窗體.按鈕.觸發();
            System.Threading.Thread.Sleep(500);
        }
        Console.WriteLine("Press any key to continue...");
        Console.ReadKey();
    }
}

}</pre>
不同的地方:
1 本示例中delegate myevnethandler是mybutton類內部成員,在系統中eventhander是system命名空間下的一個成員。

 本文由用戶 mb78 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!