C#事件-自定义事件的使用方法

转载 2012年03月24日 16:01:06

1、声明一个委托类

public delegate SomethingChangedHandler(object sender,EventArgs e);
2、在你的类中声明一个事件绑定到该委托 public event SomethingChangedHandler Changed;
3、在相应的方法中触发此事件
public void ChangeSomething()
{

Changed(this,new EventArgs); //触发事件

}

4、在调用者订阅事件
your class's instance.Changed+=new SomethingChangedHandler(你的方法名);

5、取消订阅
订阅该事件的对象.Changed-=new SomethingChangedHandler(你的方法名);

注意:因为c#中事件是通过委托实现的,而委托不能被继承,所以导致事件只能在其定义的类中按事件名(该事件委托的参数...) 的形式触发。如果一个事件需要在派生类中被触发,可以在基类中定义一个触发该事件的方法 SendSomeEvent(),派生类中重写该方法,并调用base.SendSomeEvent();

看下面的实例:

namespace ConsoleApplication3
{
    class 出版社                                                         //定义出版社类
    {
        public delegate void 出版();                             //声明事件所需的代理
        public event   出版 已经出版;                           //事件的声明
        public void 发行()                                            //触发事件的方法
        {
            Console.WriteLine("发行刊物");
            已经出版();
        }
    }
    class 订阅者                                                       //定义订阅者类
    {
        public void 订阅()                           
        {
            Console.WriteLine("订阅者已经订阅");
        }
    }
    class Program
    {

        static void Main(string[] args)
        {
            出版社 甲出版社=new 出版社();
            订阅者 张三=new 订阅者();
            甲出版社.已经出版+=new 出版社.出版(张三.订阅);     //向事件发行者订阅一个元事件
            甲出版社.发行();                                                        //触发事件
         }
    }
}

using System;

public class Publisher //出版社
{
public delegate void Publish(string name); //声明事件所需的代理
public event Publish OnPublish; //事件的声明
public void issue(string _name) //触发事件的方法
{
    if (OnPublish != null)
    {
      Console.WriteLine("发行刊物");
      OnPublish(_name);
    }
}
}

class Subscriber //订阅者
{
public void Receive(string str) //定义事件处理程序
{
    Console.WriteLine("订阅者" + str + "已经收到了刊物!");
}
}

class story
{
static void Main()
{
    Publisher Pub = new Publisher();
    Subscriber zs = new Subscriber();
    Pub.OnPublish += new Publisher.Publish(zs.Receive);
    Pub.issue("张三"); //触发事件
}
}

C#开源控件DocKPanel

转自:http://blog.csdn.net/leewenjin/article/details/38730903 weiFenLuo.winFormsUI.Docking.dll是开...

String:本质上是字符数组

String用来表示文本,即一系列 Unicode 字符。字符串是我们开发过程中频繁使用的对象,我们在软件界面上提示用户的所有一切都是字符串:不管是发票的日期还是发票的编号,或者是发票的金额虽然在定...

友盟自定义事件的使用方法

友盟为用户提供了自定义事件的功能,用于追踪用户行为,记录行为发生的具体细节。      1、计数事件    计数事件统计事件的发生次数、独立用户数、事件时长及事件各参数的发生次数、时长。    ...

Flex自定义事件和组件的使用方法

在Flex中使用自定义事件和组件可以使代码变得简洁清晰,需要注意的两点是在自定义事件中要重写clone方法,返回自定义事件对象;在自定义组件中要在Metadata中,声明组件事件的名字和类型。 自定义...
  • abrahu
  • abrahu
  • 2011年06月11日 01:47
  • 2196

'VB.net 自定义事件使用方法

'VB.net 自定义事件使用方法 '1.先定义包含事件的类(如下) Public Class TestEvent     Public Event MyEvent(ByVal s As S...
  • latior
  • latior
  • 2016年06月22日 09:26
  • 1902

【C#】往异步下载的方法传递自定义完成事件

webClient.DownloadFileAsync

C#中自定义控件隐藏基类成员(属性、方法和事件)的方法

编写自定义控件时,总是继承C#中提供的Control类,而Control类是C#中所有窗体控件的基类,里面定义了大量的属性、方法和事件,而很多基类成员在自定义控件中可能不需要,因为编写者会希望在自定义...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#事件-自定义事件的使用方法
举报原因:
原因补充:

(最多只允许输入30个字)