C#事件代理簡單例子

來源:互聯網
上載者:User
 

事件與代理是比較難理解的部分,本人從中學習中寫出的比較好理解的例子,C#中的delegate和C++中的函數指標基本是一回事,C#正是以delegate的形式實現了函數指標。不同的地方在於C#中delegate是型別安全的。

例一:

namespace DelegateTest
{
    public delegate void MyDelegate();
    class Test
    {
        static void Main(string[] args)
        {
            ChangedEvent chanevent = new ChangedEvent();
            EventListener eventlis = new EventListener(chanevent);
            chanevent.OnChanged();

          
           
            Console.Read();
        }
    }
   //定義一個包含事件成員的類,當發生變化時,就會觸發事件
    public class ChangedEvent
    {
       public event MyDelegate Changed;
       public void OnChanged()
        {
            if (Changed != null)
                Console.WriteLine("觸發事件:");

                Changed();
        }
       
    }
    

    //建立包含處理方法的類
    class EventListener
    {
        //用以儲存從構造涵數的參數傳遞來的對象,主要是為了以後解除事件綁定
       // private ChangedEvent CE;

        public EventListener(ChangedEvent ce)
        {
           // CE = ce;
            ce.Changed += new MyDelegate(DispMethod);
        }
        private void DispMethod()
        {
            Console.WriteLine("This is called when the event fires.");
       
        }
      
    }
}

例二:

namespace Delegate2
{
 
    public delegate void MyDelegate();
    class Test
    {
      
        static void Main(string[] args)
        {
            ChangedEvent chanevent = new ChangedEvent();
            A a=new A();
            chanevent.Changed += new MyDelegate(a.DispMethod);
            chanevent.OnChanged();

          
           
            Console.Read();
        }
    }
    class A
    {

       public void DispMethod()
        {
            Console.WriteLine("This is called when the event fires.");

        }
    }
   
   //定義一個包含事件成員的類,當發生變化時,就會觸發事件
    public class ChangedEvent
    {
        //public delegate void MyDelegate();
       
        public event MyDelegate Changed;
        public void OnChanged()
        {
            if (Changed != null)
            {
                Console.WriteLine("觸發事件:");

                Changed();
            }
        }

例三:有參數形的Delegate
       

 namespace ConsoleApplication1
{
//定義委託
public delegate bool CompareInt(int a, int b);
public class MyCompare
{
public static bool ShowResult(int x , int y)
{
bool index = x > y ? true : false;
return index;
}

}
class Program
{

static void Main(string[] args)
{
CompareInt   myDelegate = new CompareInt(MyCompare.ShowResult);
int a = 20;
int b = 15;
bool whoBigger = myDelegate(a, b);
Console.WriteLine(" a > b ?: " + whoBigger );
Console.Read();
}
}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.