您的位置:首页 > 编程语言 > C#

(转)关于c#中的事件

2014-01-01 11:29 316 查看
原文链接/article/1741148.html

如有不明白的地方欢迎加QQ群14670545 探讨

最近在看委托,然后看到事件,以前一直很模糊,关于事件的触发者和响应者的关联。贴一个简单的例子:

1.新建一个类Control.cs

[csharp] view plaincopy

using System;

namespace EventComplex

{

/*

* C#中的事件处理实际上是一种具有特殊签名的delegate

*/

public class Control

{

/// <summary>

/// 代表事件发送者

/// </summary>

/// <param name="sender">代表事件发送者</param>

/// <param name="e">事件参数类

/// <remarks>用来包含与事件相关的数据,所有的事件参数类都必须从System.EventArgs类派生</remarks>

/// </param>

public delegate void MyEventHandler(object sender, MyEventArgs e);//System.EventArgs e

public event MyEventHandler MyEvent;

public Control()

{

this.MyEvent += new MyEventHandler(RaiseSomeEvent);

}

/// <summary>

/// 一个事件

/// </summary>

public void RaiseSomeEvent(object sender, MyEventArgs e)

{

Console.WriteLine("hello " + e.ParamName);

Console.ReadLine();

}

public void RiseSomeEvent()

{

//System.EventArgs e = new System.EventArgs();

Console.Write("Please input 'Name':");

string _param = Console.ReadLine();//ReadLine:按下回车以后才读取,然后触发MyEvent事件

//if (_param.Equals("jon"))//在用户输入jon的情况下触发事件,否则不触发

MyEvent(this, new MyEventArgs(_param));//MyEvent(this,e)

}

}

public class MyEventArgs : System.EventArgs

{

public string ParamName;

public MyEventArgs(string _name)

{

ParamName = _name;

}

}

}

2.我们去Main函数里面测试一下;

[csharp] view plaincopy

public static void demo4()

{

Control ctr = new Control();

ctr.MyEvent += new Control.MyEventHandler(ResponseSomeEvent);

ctr.RiseSomeEvent();

}

public static void ResponseSomeEvent(object sender, EventArgs e)

{

Console.WriteLine("Some event occur!");

}

[csharp] view plaincopy

static void Main(string[] args)

{

demo4();

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: