欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c# 委托和事件实例学习

程序员文章站 2022-06-30 09:56:11
common.cs: 复制代码 代码如下: using system; using system.collections.generic; using system.tex...
common.cs:
复制代码 代码如下:

using system;
using system.collections.generic;
using system.text;
namespace delegateandevent.app_code
{
public class common
{
//定义全局变量.
public static string txt = "";
#region 定义方法
public string hellocsharp(string name)
{
txt += "hello " + name;//这样做是为了看到委托可以执行多个方法.
return "hello " + name;
}
public string hicsharp(string name)
{
txt += "hi " + name;
return "hi " + name;
}
#endregion
#region 定义委托
//定义委托和定义方法类似,区别是加个delegate.去掉方法体,只写方法签名.
public delegate string sayhi(string name);
//委托可以像普通变量一样使用.区别在于可以把多个方法赋给委托.
public sayhi dlgt1, dlgt2;
//使用委托
public void usedelegate(string name, sayhi sayhi)
{
sayhi(name);
}
#endregion
#region 事件
//声明事件
public event sayhi hievent;
//触发事件
public void causeevent()
{
hievent += hellocsharp;
hievent += hicsharp;
if (hievent != null)
{
hievent("crane");
}
}
#endregion
}
}
using system;
using system.collections.generic;
using system.text;
namespace delegateandevent.app_code
{
public class common
{
//定义全局变量.
public static string txt = "";
#region 定义方法
public string hellocsharp(string name)
{
txt += "hello " + name;//这样做是为了看到委托可以执行多个方法.
return "hello " + name;
}
public string hicsharp(string name)
{
txt += "hi " + name;
return "hi " + name;
}
#endregion
#region 定义委托
//定义委托和定义方法类似,区别是加个delegate.去掉方法体,只写方法签名.
public delegate string sayhi(string name);
//委托可以像普通变量一样使用.区别在于可以把多个方法赋给委托.
public sayhi dlgt1, dlgt2;
//使用委托
public void usedelegate(string name, sayhi sayhi)
{
sayhi(name);
}
#endregion
#region 事件
//声明事件
public event sayhi hievent;
//触发事件
public void causeevent()
{
hievent += hellocsharp;
hievent += hicsharp;
if (hievent != null)
{
hievent("crane");
}
}
#endregion
}
}

mainfrm.cs:
复制代码 代码如下:

using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.text;
using system.windows.forms;
using delegateandevent.app_code;
namespace delegateandevent
{
public partial class mainfrm : form
{
common common = new common();
public mainfrm()
{
initializecomponent();
}
private void btnok_click(object sender, eventargs e)
{
//this.lblshow.text += common.hellocsharp("tree");
//测试委托
common.dlgt1 = common.hellocsharp;//只写方法签名,不加()
common.dlgt1 += common.hicsharp;//虽然两个方法都调用了,但是返回值只返回最后一次调用的值.
//this.lblshow.text += common.dlgt1("tree");//使用委托就像使用方法一样.
//this.lblshow.text = common.txt;
//用委托做参数
//common.usedelegate("tree", common.dlgt1);
//this.lblshow.text = common.txt;
//事件
/*这里的问题是不能用common.hievent();这样引用.
原因是需要在这个类里定义一个事件变量.
*/
common.causeevent();
this.lblshow.text = common.txt;
}
}
}