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

      

c# 关键字delegate、event(委托与事件)[MSDN原文摘录][2]

时间: 2024-10-06 13:19:23

c# 关键字delegate、event(委托与事件)[MSDN原文摘录][2]的相关文章

c# 关键字delegate、event(委托与事件)[MSDN原文摘录][1]

A delegate is a type that safely encapsulates a method, similar to a function pointer in C and C++. Unlike C function pointers, delegates are object-oriented, type safe, and secure. The type of a delegate is defined by the name of the delegate. The f

浅谈C#委托和事件(转载)

委托给了C#操作函数的灵活性,我们可使用委托像操作变量一样来操作函数,其实这个功能并不是C#的首创,早在C++时代就有函数指针这一说法,而在我看来委托就是C#的函数指针,首先先简要的介绍一下委托的基本知识: 委托的定义委托的声明原型是 delegate <函数返回类型> <委托名> (<函数参数>)例子:public delegate void CheckDelegate(int number);//定义了一个委托CheckDelegate,它可以注册返回void类型且

.net初学之定义委托、事件

1.委托关键字:delegate 语法: [访问修饰符]  delegate 返回类型 委托名(); 类似C语言中的指针,指向另一个与他参数列表和返回类型相同的方法. 2.事件关键字:event 语法: [访问修饰符] event 委托名 事件名: 特殊的委托: 由一个行为引发的系列行为的并发. 有委托才有事件.

第12章 委托与事件

委托和事件在 .NET Framework 中的应用非常广泛,然而,较好地理解委托和事件对很多接触 C# 时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里堵得慌,浑身不自在.本章中,我将由浅入深地讲述什么是委托.为什么要使用委托.事件的由来..NET Framework 中的委托和事件.委托中方法异常和超时的处理.委托与异步编程.委托和事件对Observer 设计模式的意义,对它们的编译代码也做了讨论. 12.1将方法作为

C#语法之委托和事件

从大学就开始做C#这块,也做C#几年了,最近又从ios转回.Net,继续做C#,之前也没有写博客的习惯,写博客也是从我做ios的时候开始的,现在既然又做回了.net,那就写点关于.Net的博客,可能在大牛眼里这些都是简单基础的,不过回过头看我当时初学的时候觉得委托事件是不容易理解的,我这里也是想着联系着OC,两者有比较的学习下.毕竟都是面向对象语言,思想是相通的. 委托在OC中类似block,都是指向一个函数,其实他没和C++的函数指针类似.但委托还是和函数指针不太一样,委托是完全面向对象的,是

委托与事件——委托

C#中的委托与事件是很重要的概念,要学好C#,必须冲破这一关. 1.委托 关键字delegate,委托,它与类.枚举.结构.接口一样,也是一种类型. 由于委托是代表了一类具有相同参数列表和返回值的函数,委托定义的变量用于保存具有相同签名的函数实体,它可以指代任何函数.所以,我们说类是对象的抽象,那么委托就可以看成是函数的抽象. 委托的好处: 1.将方法动态地赋给参数,可以避免在程序中大量使用if-else(switch-case)语句,使程序具有良好的可扩展性. 2.可以把函数本身的处理逻辑抽象

C# 委托、事件

委托(delegate) 访问修饰符 delegate 返回值类型 委托名 (参数列表) 委托是一种可以把引用存储为函数的类型,也就是说它声明了一种用于保存特定格式函数的数据类型,如图C++中的函数指针. 1.匿名委托 委托类型 实例化名 = delegate(参数列表){函数体} 2.泛型委托 delegate T1 委托名<T1, T2>(T1 v1, T2 v2); 3.委托的多播性 委托类型 实例化名 += 注册函数 委托类型 实例化名 -= 解除函数 一个实例化委托不仅可以注册一个函

c#中的delegate(委托)和event(事件)

委托: 托付其他人做这件事   ,包括 托付自己  ,即  一个方法 可以  调用 没有关系的其他方法 , 也可以 将委托传递过去 ,回调自己的方法 ,且 可以自定义参数 ,非常方便 互相传值, 适合解耦 关系. 示例: public delegate void ChangeMoney(object s, int n);   // 用 delegate  声明委托 1. 调用 其他方法 售卖 页面添加商品,添加 的 商品 在另一个页面也能看见 . 售卖页面 类里面 定义委托: //定义一个委托 

[转载]C#委托和事件(Delegate、Event、EventHandler、EventArgs)

原文链接:http://blog.csdn.net/zwj7612356/article/details/8272520 14.1.委托 当要把方法作为实参传送给其他方法的形参时,形参需要使用委托.委托是一个类型,是一个函数指针类型,这个类型将该委托的实例化对象所能指向的函数的细节封装起来了,即规定了所能指向的函数的签名,也就是限制了所能指向的函数的参数和返回值.当实例化委托的时候,委托对象会指向某一个匹配的函数,实质就是将函数的地址赋值给了该委托的对象,然后就可以通过该委托对象来调用所指向的函