sender表示触发该事件的对象,e表示在事件处理函数里可以被使用的一些数据象NeweggEventArgs可以继承自EvenetArgs类。当然有的时候不需要派生自己的类想一些GUI的程序。
首先要知道什么是委托。在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#中的委托、事件以及事件处理机制,帮助开发者深入理解这两个概念。 首先,我们来了解**委托(Delegate)**。在C#中,委托是一种类型,它代表了方法的引用。换句话说,委托可以看作是能够存储方法...
事件(event)是C#中的一种机制,允许对象在发生某些情况时通知其他对象。事件(event)使用方法详解将从概念、使用方法、事件编程的优点、事件与委托的关系、事件的实现等方面进行讲解。 事件(event)的概念: 事件...
6. **异常处理**:C#有完善的异常处理机制,使用try-catch块捕获并处理运行时错误,提高程序的健壮性。 7. **LINQ(Language Integrated Query)**:LINQ是C#中的一项功能,允许开发者以一致的方式查询各种数据源,...
### C#中的委托和事件详解 #### 引言 委托和事件是.NET Framework中的核心概念之一,对于初学者来说可能有些难以理解。然而,一旦掌握,就能极大地提高编程效率及软件设计的灵活性。本文旨在逐步深入地介绍委托与...
下面我们将深入探讨C#中事件和响应方法的工作原理。 首先,事件在C#中通过`event`关键字声明。例如,`public event EventHandler Click;`声明了一个名为`Click`的事件,它使用`EventHandler`这个委托类型。`...
### C#窗体中Invoke和BeginInvoke方法详解 在探讨C#窗体中`Invoke`和`BeginInvoke`方法的使用及其重要性之前,我们首先需要理解.NET框架下的多线程与GUI操作的基本原则,以及为何这两者在跨线程更新GUI时不可或缺。...
### C#事件与委托详解 #### 一、委托(Delegate) **委托**是C#语言中一种非常重要的机制,用于封装方法的引用。通过委托,我们可以在程序运行时动态地调用方法,这对于构建灵活的应用程序至关重要。 ##### 委托的...
6. 错误处理:异常处理机制,包括try-catch-finally语句块,自定义异常,以及如何利用using语句管理资源。 在案例开发部分,你可能会接触到: 1. Windows桌面应用开发:使用Windows Forms或WPF创建用户界面,学习...
在事件处理中,C#引入了事件(Event)的概念,它基于委托。事件是类的一个私有成员,只能由该类自身引发。其他类可以订阅这些事件,当事件发生时,订阅者注册的处理方法将被调用。这通常涉及到`EventHandler`类型的...
C#中的委托机制详解 委托是C#中的一个非常重要的概念,它可以让开发者定义一个方法签名,然后将其作为参数传递给其他方法,或者将其赋值给变量,以便在后续使用时更加灵活。下面我们将深入讲解委托的定义、使用委托...
`DataSet`和`DataTable`的使用为C#开发者提供了灵活且高效的数据处理机制,无论是进行数据的本地存储还是与数据库进行交互,都能实现高性能和高灵活性的数据管理。通过理解`DataSet`和`DataTable`的特性和操作方法,...
3. **异常处理**:C#有完善的异常处理机制,通过try-catch-finally语句块来捕获和处理运行时错误,确保程序的健壮性。 4. **垃圾回收**:C#具有自动内存管理,通过垃圾回收机制管理内存,避免了程序员手动管理内存...
《C#基础与案例开发详解》是一本深入探讨C#编程语言及其应用的书籍,而提供的光盘代码【6】则是该书配套的教学资源,包含了作者在多年系统软件项目实施中积累的实战经验和示例代码。这个压缩包是作者三年珍藏的精华...
书中会讲解异常处理机制,使用调试器进行问题定位,以及优化代码的方法。 9. **设计模式和最佳实践**:设计模式是软件开发中的通用解决方案,书中可能包含一些常见的设计模式,如单例模式、工厂模式,并强调遵循...
根据提供的标题“C#网站开发案例详解”及描述来看,本文将主要聚焦于使用C#进行网站开发的具体案例分析与实践教程。C#作为一种广泛应用于Web应用开发的强大编程语言,其在网站构建中的优势十分显著。尽管提供的部分...