c# 委托和事件实例学习
c# 委托和事件实例学习
发布时间:2016-12-28 来源:查字典编辑
摘要:Common.cs:复制代码代码如下:usingSystem;usingSystem.Collections.Generic;usingSy...

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;

}

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C#教程学习
热门C#教程学习
编程开发子分类