`
water84222
  • 浏览: 368087 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

关于c#中的事件处理机制

阅读更多
在程序中怎么实现事件。要明白事件,首先要知道什么是委托。在C#中委托允许开发人员
将一个对象中的方法传递给另一个能调用该方法的类的某个对象。比如:可以将类AC中的一个方法ADD[前提是这个方法以被包含在某个委托中了]传递给另一个类WMS。此时类WMS就能调用类AC中的ADD了。当然不管你是以什么方式实现方法的传递了,可以是静态的,也可以是实例化的。。要实现一个委托,需要按照这样的不揍:
A:申明委托对象。注意:参数一定要和你想要包含的方法的参数形式一致。
public delegate void NeweggDelegate(string values)
B:定义方法
class NeweggClass1{
 public viod NeweggMethod1(string values){}
public viod NeweggMethod2(string values){}
....}
 C:创建一个委托对象此时将这个方法包含在该委托对象中
class NeweggClass2{
public NeweggDelegate createDelegate()
{NeweggClass1 obj1=new NeweggClass1();
NeweggDelegate dele1=new NeweggDelegate(obj1.NeweggMethod1);
NeweggDelegate dele2=new NeweggDelegate(obj1.NeweggMethod2);
NeweggDelegate dele3=dele1+dele2;//属于多点委托了
return dele3;
}
}
 D:再调用包含在委托中的方法。
class NeweggClass3
{
public void NeweggCallDelegate(NeweggDelegate de,string values)
{de(values);}
}
class test
{
static void Main(string[] args)
{
NeweggClass2 cls2=new NeweggClass2();
NeweggDelegate  delel=cls2.createDelegate();
NeweggClass3 cls3=new NeweggClass3();
cls3.NeweggCallDelegate(delel,"deleagte is used");
}
}
而事件是具有特定参数的委托对象而已。格式象:public delegate void NeweggEventHandler(object sender,NeweggEventArgs e);
sender表示触发该事件的对象,e表示在事件处理函数里可以被使用的一些数据象NeweggEventArgs可以继承自EvenetArgs类。当然有的时候不需要派生自己的类想一些GUI的程序,里面有很多县城的事件使用如:MouseEventArgs。否则必须从EventArgs类派生。
现在举例如下:
using System;
//步骤1:声明委托对象
public delegate void MyHandler1(object sender,MyEventArgs e);
public delegate void MyHandler2(object sender,MyEventArgs e);
//步骤2:创建事件处理函数的方法
class A{
public const string m_id="Class A";
public void OnHandler1(object sender,MyEventArgs e){
Console.WriteLine("I am in OnHandler1 and MyEventArgs is {0}",
e.m_id);
}
public void OnHandler2(object sender,MyEventArgs e){
Console.WriteLine("I am in OnHandler2 and MyEventArgs is {0}",
e.m_id);
}
//步骤3:创建委托对象,并事件处理函数包含在其中同时设置好将要触发事件的对象
public A(B b){
MyHandler1 d1=new MyHandler1(OnHandler1);
MyHandler2 d2=new MyHandler2(OnHandler2);
b.Event1 +=d1;
b.Event2 +=d2;
}
}
//步骤4:通过委托对象(也就是触发事件)来调用被包含的方法
class B{
public event MyHandler1 Event1;
public event MyHandler2 Event2;
public void FireEvent1(MyEventArgs e){
if(Event1 != null){
Event1(this,e);
}
}
public void FireEvent2(MyEventArgs e){
if(Event2 != null){
Event2(this,e);
}
}
}
public class MyEventArgs EventArgs{
public string m_id;
}
public class Driver{
public static void Main(){
B b= new B();
A a= new A(b);
MyEventArgs e1=new MyEventArgs();
MyEventArgs e2=new MyEventArgs();
e1.m_id ="Event args for event 1";
e2.m_id ="Event args for event 2";
b.FireEvent1(e1);
b.FireEvent2(e2);
}

 
分享到:
评论

相关推荐

    C#中的事件处理机制

    学习如何使用和事件有关的类、委托和订阅事件,C#事件处理的工作流程。

    c# 委托、事件详解及事件处理机制

    文档中收集了很多篇关于C#中委托与事件的文章,读者可以以此对比,并且文档中做了多处批示,希望能给大家提供一些帮助。

    C#内存管理机制C#内存管理机制

    C#内存管理机制 C#内存管理机制 C#内存管理机制

    C#消息处理机制

    C#对消息重新进行了面对对象的封装,在C#中消息被封装成了事件。 System.Windows.Forms.Application类具有用于启动和停止应用程序和线程以及处理Windows消息的方法。

    C#中委托时间的处理机制

    C#中委托时间的处理机制

    C# 事务处理机制

    根据北风数据库的Orders 与 order details建立的事务处理机制,表中很多东西都用控件直接处理,不写程式,所以代码很少,只有几行

    关于C#事件处理机制的案例分析.docx

    。。。

    关于C#事件处理机制的案例分析.pdf

    。。。

    从Java的角度来讲解C#的代理、事件和事件句柄的原理

    5、如果一切正常,那么你会看到不参的事件处理,与带的事件处理效果。 目的:本人在写完Java实现的游戏服务端引擎基础框架之后,需要与C#客户端通讯,于是开始研读C#开发语言,希望能够写出与Java通讯的客户端代码,...

    浅析C# 中object sender与EventArgs e

    了解C#中的预定义事件处理机制 在写代码前我们先来熟悉.net框架中和事件有关的类和委托,了解C#中预定义事件的处理。 EventArgs是包含事件数据的类的基类,用于传递事件的细节。 EventHandler是一个委托声明如下 ...

    C#语言提供了处理这种

    C#语言提供了处理这种情形的绝佳工具,其机制称为异常处理。 C#语言提供了处理这种情形的绝佳工具,其机制称为异常处理。

    C# 实现Scoket心跳机制的方法

    主要介绍了C# 实现Scoket心跳机制的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    C# 类间通信实例(事件机制)

    C# 类间通信实例,应用了事件委托的通信机制,技术有限,如有错处理请指正。

    关于C#编程语言的一些常见基础面试题.pdf

    请说明在C#中的异常处理机制。 6. 什么是C#中的泛型(Generics)?请说明在C#中的泛型使用方法。 7. C#中的委托(Delegate)是什么?请说明在C#中委托的定义和使用。 8. 什么是C#中的属性(Properties)?请说明在C#...

    C++/C#异常处理机制的内存管理策略

    介绍了c++/C#的异常处理机制中,抛掷和捕获对象的构造和析构问题,分析在异常处理中内存资源的管理策略。

    C#中通过钩子实现屏蔽组合功能键

    Hook(钩子)是WINDOWS提供的一种消息处理机制平台,是指在程序正常运 行中接受信息之前预先启动的函数,用来检查和修改传给该程序的信息,(钩子)实 际上是一个处理消息的程序段,通过系统调用,把它挂入系统。...

    C#之实现Scoket心跳机制

    C#高级编程之实现Socket心跳机制,TCP网络长连接。 心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么...

    C#常见面试题目及答案

    C#常见面试题目及答案 1. c#中错误处理机制有哪些 在ASP.NET中,错误处理分为两个层面:页面输入信息验证、CLR提供的结构化错误处理机制。

    C#事件实例详解

    C#事件实例详解 ... C#语言中关于事件(event)结合代理(delegate)实现对象状态变更时的通知机制,总感觉这种处理有点过于复杂化了,但既然人家这么设计必定有人家的道理,相信并向人家学习而不急于批判和否定

Global site tag (gtag.js) - Google Analytics