zoukankan      html  css  js  c++  java
  • c# 关键字delegate、event(委托与事件)[MSDN原文摘录][2]

    //Demo1:Declaring an event in an interface and implementing it in //a class.
    
    // event_keyword.cs
    using System;
    public delegate void MyDelegate();   // delegate declaration
    
    public interface I 
    {
       event MyDelegate MyEvent;
       void FireAway();
    }
    
    public class MyClass: I 
    {
       public event MyDelegate MyEvent;
    
       public void FireAway() 
       {
          if (MyEvent != null)
             MyEvent();
       }
    }
    
    public class MainClass 
    {
       static private void f() 
       {
          Console.WriteLine("This is called when the event fires.");
       }
    
       static public void Main () 
       {
          I i = new MyClass();
    
          i.MyEvent += new MyDelegate(f);
          i.FireAway();
       }
    }
    //Demo2:One use for accessor-declarations is to expose a large //number of events without allocating a field for each event, but //instead using a hash table to store the event instances. This is //only useful if you have a very large number of events, but you //expect most of the events will not be implemented.
    
    // event_keyword2.cs
    using System;
    using System.Collections;
    
    public delegate void MyDelegate1(int i);
    public delegate void MyDelegate2(string s);
    public delegate void MyDelegate3(int i, object o);
    public delegate void MyDelegate4();
    
    public class PropertyEventsSample 
    {
       private Hashtable eventTable = new Hashtable();
    
       public event MyDelegate1 Event1 
       {
          add 
          {
             eventTable["Event1"] = (MyDelegate1)eventTable["Event1"] + value;
          }
          remove
          {
             eventTable["Event1"] = (MyDelegate1)eventTable["Event1"] - value; 
          }
       }
    
       public event MyDelegate1 Event2 
       {
          add 
          {
             eventTable["Event2"] = (MyDelegate1)eventTable["Event2"] + value;
          }
          remove
          {
             eventTable["Event2"] = (MyDelegate1)eventTable["Event2"] - value; 
          }
       }
    
       public event MyDelegate2 Event3 
       {
          add 
          {
             eventTable["Event3"] = (MyDelegate2)eventTable["Event3"] + value;
          }
          remove
          {
             eventTable["Event3"] = (MyDelegate2)eventTable["Event3"] - value; 
          }
       }
    
       public event MyDelegate3 Event4 
       {
          add 
          {
             eventTable["Event4"] = (MyDelegate3)eventTable["Event4"] + value;
          }
          remove
          {
             eventTable["Event4"] = (MyDelegate3)eventTable["Event4"] - value; 
          }
       }
    
       public event MyDelegate3 Event5 
       {
          add 
          {
             eventTable["Event5"] = (MyDelegate3)eventTable["Event5"] + value;
          }
          remove
          {
             eventTable["Event5"] = (MyDelegate3)eventTable["Event5"] - value; 
          }
       }
    
       public event MyDelegate4 Event6 
       {
          add 
          {
             eventTable["Event6"] = (MyDelegate4)eventTable["Event6"] + value;
          }
          remove
          {
             eventTable["Event6"] = (MyDelegate4)eventTable["Event6"] - value; 
          }
       }
    }
    
    public class MyClass 
    {
       public static void Main() 
       {
       }
    }
    //Deom3
    
    public class SampleEventArgs
        {
            public SampleEventArgs(string s) { Text = s; }
            public String Text {get; private set;} // readonly
        }
        public class Publisher
        {
            // Declare the delegate (if using non-generic pattern).
            public delegate void SampleEventHandler(object sender, SampleEventArgs e);
    
            // Declare the event.
            public event SampleEventHandler SampleEvent;
    
            // Wrap the event in a protected virtual method
            // to enable derived classes to raise the event.
            protected virtual void RaiseSampleEvent()
            {
                // Raise the event by using the () operator.
                if (SampleEvent != null)
                    SampleEvent(this, new SampleEventArgs("Hello"));
            }
        }

    参考链接:

      http://msdn.microsoft.com/zh-cn/library/ms173171(v=vs.110).aspx

      http://msdn.microsoft.com/zh-cn/library/awbftdfh.aspx

      http://msdn.microsoft.com/zh-cn/library/8627sbea(v=vs.110).aspx

          

  • 相关阅读:
    Qt中的QString和QStringList常用方法
    Qt界面编程基本操作
    vs+qt编程相关
    C++的一些关键字用法
    Java学习-hashcode综合练习
    Java学习-HashMap练习
    Java学习-HashSet练习
    Java学习-HashMap性能简单测试
    Java学习-排序二叉树性能简单测试
    java学习-排序二叉树
  • 原文地址:https://www.cnblogs.com/GYoungBean/p/3848128.html
Copyright © 2011-2022 走看看