不忘本~委托与事件
时间:2011-06-09 来源:Lose.zhang
MSDN是这样定义委托的:
委托是一种定义方法签名的类型。 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联。 您可以通过委托实例调用方法。
下面这个委托及事件主要完成显示按钮名称和值的功能
/// <summary>
/// 自定义委托
/// </summary>
class SelfDelegate
{
/// <summary>
/// 显示工具控件信息
/// </summary>
/// <param name="sender"></param>
internal delegate void ToolInfo(object sender); //把委托看成是一种特殊的类,而事件就是委托类的一个实例
/// <summary>
/// 显示控件信息事件
/// </summary>
internal event SelfDelegate.ToolInfo ToolName;
/// <summary>
/// 事件触发机制
/// </summary>
/// <param name="sender"></param>
internal void doEvent(object sender)
{
ToolName(sender);//事件名(方法签名)
}
}
在Form1部分类中的内容是:
SelfDelegate sd = new SelfDelegate();
/// <summary>
/// this.button1.Click += new System.EventHandler(this.button1_Click);
/// 为事件加上一个委托实例,这行是VS自动添加上去的
/// this.button1就是我们刚刚添加的按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("按钮单击事件被触发");
sd.ToolName += new SelfDelegate.ToolInfo(ShowToolName);
sd.ToolName += new SelfDelegate.ToolInfo(ShowToolValue);
sd.doEvent(sender); //将本对象源作为参数传递
}
#region 实现了委托方法签名的方法
/// <summary>
/// 显示控件名称
/// </summary>
/// <param name="sender"></param>
private void ShowToolName(object sender)
{
Button btn = sender as Button;
if (btn != null) //转换成功,失败为null,系统不会抛异常
{
MessageBox.Show(string.Format("控件名称:{0}", btn.Name));
}
}
private void ShowToolValue(object sender)
{
Button btn = sender as Button;
if (btn != null) //转换成功,失败为null,系统不会抛异常
{
MessageBox.Show(string.Format("控件值:{0}", btn.Text));
}
}
#endregion
相关阅读 更多 +