• 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

          

  • 相关阅读:
    WinAPI: DrawFrameControl 绘制控件
    WinAPI: SetPixel 和 SetPixelV 设置设备环境中指定位置的颜色
    WinAPI: GetSystemInfo 获取系统信息
    WinAPI: GetDiskFreeSpace 获取磁盘组织与容量信息
    WinAPI: GetDiskFreeSpaceEx 获取磁盘容量信息
    分享:Afinal 0.3.5 发布,Android快速开发框架
    海量数据多路归并排序的c++实现(归并时利用了败者树)
    当TransferEncoding遇上ContentEncoding_虚拟现实_百度空间
    chunked 编码 解码 c算法 yaneng的专栏 博客频道 CSDN.NET
    败者树 多路平衡归并外部排序 Dreaming.O的专栏 博客频道 CSDN.NET
  • 原文地址:https://www.cnblogs.com/GYoungBean/p/3848128.html
Copyright © 2020-2023  润新知