程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> C#事件機制歸納(上)

C#事件機制歸納(上)

編輯:C#基礎知識

1.委派的實現過程。

首先來看一下委派,委派其實就是方法的傳遞,並不定義方法的實現。事件其實就是標准化了的委派,為了事件處理過程特制的、稍微專業化一點的組播委派(多點委派)。下面舉一個例子,我覺得把委派的例子和事件的例子比較,會比較容易理解。

using System;



class Class1

{

    delegate int MathOp(int i1,int i2);

    static void Main(string[] args)

    {

        MathOp op1=new MathOp(Add);

        MathOp op2=new MathOp(Multiply);

        Console.WriteLine(op1(100,200));

       Console.WriteLine(op2(100,200));

        Console.ReadLine();

    }

    public static int Add(int i1,int i2)

    {

        return i1+i2;

    }

    public static int Multiply(int i1,int i2)

    {

       return i1*i2;

    }

}



首先代碼定義了一個委托MathOp,其簽名匹配與兩個函數Add()和Multiply()的簽名(也就是其帶的參數類型數量相同):

delegate int MathOp(int i1,int i2);

Main()中代碼首先使用新的委托類型聲明一個變量,並且初始化委托變量.注意,聲明時的參數只要使用委托傳遞的函數的函數名,而不加括號:

MathOp op1=new MathOp(Add);

(或為MathOp op1=new MathOp(Multiply);)

委托傳遞的函數的函數體:

public static int Add(int i1,int i2)

{

    return i1+i2;

}

public static int Multiply(int i1,int i2)

{

   return i1*i2;

}

然後把委托變量看作是一個函數名,將參數傳遞給函數。 Console.WriteLine(op1(100,200));

Console.WriteLine(op2(100,200));





2.事件的實現過程

using System;



class Class1

{

    static void Main(string[] args)

    {

        Student s1=new Student();

        Student s2=new Student();

        s1.RegisterOK +=new Student.DelegateRegisterOkEvent(Student_RegisterOK);

        s2.RegisterOK +=new Student.DelegateRegisterOkEvent(Student_RegisterOK);

        s1.Register();

        s2.Register();

        Console.ReadLine();

    }

    static void Student_RegisterOK()

    {

       Console.WriteLine("Hello");

    }

}



class Student

{

    public delegate void DelegateRegisterOkEvent();

    public event DelegateRegisterOkEvent RegisterOK;

    public string Name;

    public void Register()

    {

        Console.WriteLine("Register Method");

       RegisterOK();

    }

}

在Student類中,先聲明了委托DelegateRegisterOkEvent(),然後使用event和要使用的委托類型(前面定義的DelegateRegisterOkEvent委托類型)聲明事件RegisterOK(可以看作是委托的一個實例。):

public delegate void DelegateRegisterOkEvent();

public event DelegateRegisterOkEvent RegisterOK;

然後在Main()函數中,實例化Student類,然後s1.RegisterOK事件委托給了Student_RegisterOK 方法。通過“+=”(加等於)操作符非常容易地為.Net對象中的一個事件添加一個甚至多個響應方法;還可以通過非常簡單的“-=”(減等於)操作符取消這些響應方法。

然後,當調用s1.Register()時,事件s1.RegisterOK發生。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved