能说说委托和事件的使用 委托和事件的使用,还有我怎么觉得委托中的方法可以直接使用,委托是在什么情况下用的啊,还有委托里面的参数跟事件中的参数有什么关联,,,求恶补委托和事件啊啊啊高手弄个简单易懂的说明,,,谢谢,C#新手!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 事件处理的方法要与委托里面参数一致,也就是签名一致 delegate void MyDelegate(string msg);//定义委托 class Program { static void Main(string[] args) { MyClass mc = new MyClass(); mc.MyEvent += new MyDelegate(mc_MyEvent);//注册事件 mc.Output(100); } static void mc_MyEvent(string msg) { Console.WriteLine(msg+"已完成");//事件处理方法 } } class MyClass { public event MyDelegate MyEvent = null; public void OnMyEvent(string msg)//触发事件 { if (MyEvent!=null) { MyEvent(msg); } } public void Output(int x) { Console.WriteLine(x); OnMyEvent("输出操作"); } } 随便拖个服务器控件,他有很多事件,如何使用,怎么使用,弄明白.NET事件机制, 事件是一个关键字,委托也是一个关键字。委托的关键字最终让你一行创建类public delegate void d();实际上,这样创建了一个继承自多播委托的类型。public event d e;这里实际上,创建了一个特殊的属性,具有add,remove方法,+=和-=重载的特殊东西。 事件的语义很好理解:又有新鲜事了,感兴趣的处理一下!实现事件机制的思路是:把你们的方法给我,我来调用。于是.net引入委托的概念,对方法进行封装,委托还可以构成链。类的event成员从本质上说是方法,无非是在委托链上添加和移除委托。.net实现事件有标准的步骤,很容易掌握,楼主去搜一下 委托的本质正如“委托”两个字所说,就是委托。using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { DelegateClass delegateobject = new DelegateClass(new TargetClass()); delegateobject.Invoke("Hello World!"); } } class DelegateClass { private TargetClass _obj; public DelegateClass(TargetClass obj) { _obj = obj; } public void Invoke(string Param) { _obj.TargetFunction(Param); } } class TargetClass { public void TargetFunction(string Param) { Console.WriteLine(Param); } }}当我们调用最终的方法的时候,我们不是直接调用它,而是寻求一个代理。如上面的代码。这样做的好处是,最终的调用被解耦,我们可以传入不同的委托(一律都是调用Invoke()),而将委托对象作为参数传给调用者,实现调用不同的方法。而C#只是提供了一种语法,简化了包装一个代理调用对象的代码,如上不使用委托的代码,可以等价如下的代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { DelegateClass delegateobject = new DelegateClass(new TargetClass().TargetFunction); delegateobject.Invoke("Hello World!"); } } delegate void DelegateClass(string Param); class TargetClass { public void TargetFunction(string Param) { Console.WriteLine(Param); } }}进而在使用的时候再简化为:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { DelegateClass delegateobject = new DelegateClass(new TargetClass().TargetFunction); delegateobject("Hello World!"); } } delegate void DelegateClass(string Param); class TargetClass { public void TargetFunction(string Param) { Console.WriteLine(Param); } }} 请教一个WPF问题 问下大家都用什么插件 .cs 与 .resx的关系? 进度条和Timer结合实现文件的拷贝 新手求助-关于VS2005 连接数据库和查询的问题 ~~~~~~~~~~明天要交付了,如何读取虚拟目录下的文件??!!~~~~~~~~~~~~~ 关于ACCESS数据库和C#怪怪的问题 怎样在页面跳转之后获取变量 关于C#数据库编程的若干问题 有没人用过DataGrid+RadioButton c#生成Word问题 如何设定窗口句柄不被改变
class Program
{
static void Main(string[] args)
{
MyClass mc = new MyClass();
mc.MyEvent += new MyDelegate(mc_MyEvent);//注册事件
mc.Output(100);
} static void mc_MyEvent(string msg)
{
Console.WriteLine(msg+"已完成");//事件处理方法
}
} class MyClass
{
public event MyDelegate MyEvent = null; public void OnMyEvent(string msg)//触发事件
{
if (MyEvent!=null)
{
MyEvent(msg);
}
}
public void Output(int x)
{
Console.WriteLine(x);
OnMyEvent("输出操作");
}
}
委托的关键字最终让你一行创建类public delegate void d();
实际上,这样创建了一个继承自多播委托的类型。public event d e;
这里实际上,创建了一个特殊的属性,具有add,remove方法,+=和-=重载的特殊东西。
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DelegateClass delegateobject = new DelegateClass(new TargetClass());
delegateobject.Invoke("Hello World!");
}
} class DelegateClass
{
private TargetClass _obj;
public DelegateClass(TargetClass obj) { _obj = obj; }
public void Invoke(string Param)
{
_obj.TargetFunction(Param);
}
} class TargetClass
{
public void TargetFunction(string Param)
{
Console.WriteLine(Param);
}
}
}
当我们调用最终的方法的时候,我们不是直接调用它,而是寻求一个代理。如上面的代码。这样做的好处是,最终的调用被解耦,我们可以传入不同的委托(一律都是调用Invoke()),而将委托对象作为参数传给调用者,实现调用不同的方法。
而C#只是提供了一种语法,简化了包装一个代理调用对象的代码,如上不使用委托的代码,可以等价如下的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DelegateClass delegateobject = new DelegateClass(new TargetClass().TargetFunction);
delegateobject.Invoke("Hello World!");
}
} delegate void DelegateClass(string Param); class TargetClass
{
public void TargetFunction(string Param)
{
Console.WriteLine(Param);
}
}
}进而在使用的时候再简化为:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DelegateClass delegateobject = new DelegateClass(new TargetClass().TargetFunction);
delegateobject("Hello World!");
}
} delegate void DelegateClass(string Param); class TargetClass
{
public void TargetFunction(string Param)
{
Console.WriteLine(Param);
}
}
}