java eventhandler 触发_事件、委托、委托方法的总结(使用EventHandler<>)

在C#中,定义事件、委托、委托方法可以使用类库内的EventHandler泛型委托来定义事件、并根据该泛型委托定义实现方法;

同样您也可以自定义委托 来定义事件以及 根据自定义的委托来定义实现事件的方法方法   :

在开始之前,我还是要介绍一下什么是事件,以及“事件”与“事件的实现”的区别:

什么是事件?

在C#中,事件就是一个宽泛的、无具体实现的事情,事件是宽泛的、只代表概念而不代表实现,具体的事件触发是通过委托调用实现方法来。

什么是EventArgs类?有什么用?

EventArgs类主要作用在于:在事件触发时,向实现的方法内传递参数,并在事件实现的方法内进行调用或者付值;当执行完事件触发后,定义事件的类就可以通过EventArgs取出被修改得值了;如果没什么好传递并付值的东西,就定义一个基类或者一个null。

1,使用EventHandler泛型委托来实现事件:

a,无返回值的事件调用:

第一步,定义一个委托,下面使用的是系统定义的泛型委托类:EventHandler<>

[Serializable]

public delegate void EventHandler(object sender, TEventArgs e);其中TEventArgs为泛化类型;

-----------------------------------------------------------------------------------------------------------------

第二步,定义TEventArgs 为 ValidationEventArgs,下面是该类的代码:

namespace Microsoft.VisualStudio.TestTools.WebTesting

{

// 摘要:

//     为 Microsoft.VisualStudio.TestTools.WebTesting.WebTestRequest.ValidateResponse

//     事件提供数据。

public class ValidationEventArgs : EventArgs

{

// 摘要:

//     获取或设置一个值,该值指示请求是否通过验证。

//

// 返回结果:

//     如果请求通过验证,则为 true;否则为 false。

public bool IsValid { get; set; }

//

// 摘要:

//     获取或设置描述验证尝试的消息。

//

// 返回结果:

//     获取指示是否发生验证的值,或者获取描述所引发异常的消息。

public string Message { get; set; }

//

// 摘要:

//     获取 Microsoft.VisualStudio.TestTools.WebTesting.WebTestRequest,它生成已验证的响应。

//

// 返回结果:

//     一个 Microsoft.VisualStudio.TestTools.WebTesting.WebTestRequest 对象。

public WebTestRequest Request { get; }

//

// 摘要:

//     获取所验证的 Microsoft.VisualStudio.TestTools.WebTesting.WebTestResponse。

//

// 返回结果:

//     一个 Microsoft.VisualStudio.TestTools.WebTesting.WebTestResponse 对象。

public WebTestResponse Response { get; }

//

// 摘要:

//     获取当前验证级别。

//

// 返回结果:

//     一个 Microsoft.VisualStudio.TestTools.WebTesting.ValidationLevel 枚举值。

public ValidationLevel ValidationLevel { get; }

//

// 摘要:

//     获取 Web 测试,该测试包含触发了验证事件的请求。

//

// 返回结果:

//     一个 Microsoft.VisualStudio.TestTools.WebTesting.WebTest 对象。

public WebTest WebTest { get; }

}

}

-----------------------------------------------------------------------------------------------------------------

第三步,定义事件的实现方法:在事件所在类内,或者其他类中:例如:

public override void Validate(object sender, ValidationEventArgs e)

{

e.IsValid = false;

if (!IsNullorEmpty())

{

int Eresult = (int)_sqlUtil3.ExecuteSql(_sqlInfo);

if (_sqlInfo.TestType.ToLower().Contains("negitive"))

{

if (Eresult == 0)

{

e.IsValid = false;

}

}

else if (_sqlInfo.TestType.ToLower().Contains("positive"))

{

if (Eresult == 0)

{

e.IsValid= true;

}

}

}

}

-----------------------------------------------------------------------------------------------------------------

第四步,定义一个触发事件的类并定义事件为委托类型,即事件的类型(委托类型):

public class TouchClass

{

public event EventHanlder(事件的类型为EventHanlder委托类型) DataEvent;

public WebTest_Sql      _webTeset_sql = new WebTest_Sql(); //实例化事件所在的类,一便调用事件使用;

DataEvent +=   EventHanlder(_webTeset_sql.Validate);//将事件与方法绑定,注意此处并未执行调用方法,只是将事件与方法做了绑定;

DataEvent(this,ValidationEventArgs); 或者DataEvent.invoke(this,ValidationEventArgs)//事件的执行,注意:这才是事件的执行语句。

}

-----------------------------------------------------------------------------------------------------------------

b,有返回值的事件调用:

第一步,定义一个委托,下面使用的是系统定义的泛型委托类:EventHandler<>

[Serializable]

public delegate string EventHandler(object sender, TEventArgs e);其中TEventArgs为泛化类型;

-----------------------------------------------------------------------------------------------------------------

第二步,定义TEventArgs 为 ValidationEventArgs,下面是该类的代码:

namespace Microsoft.VisualStudio.TestTools.WebTesting

{

// 摘要:

//     为 Microsoft.VisualStudio.TestTools.WebTesting.WebTestRequest.ValidateResponse

//     事件提供数据。

public class ValidationEventArgs : EventArgs

{

// 摘要:

//     获取或设置一个值,该值指示请求是否通过验证。

//

// 返回结果:

//     如果请求通过验证,则为 true;否则为 false。

public bool IsValid { get; set; }

//

// 摘要:

//     获取或设置描述验证尝试的消息。

//

// 返回结果:

//     获取指示是否发生验证的值,或者获取描述所引发异常的消息。

public string Message { get; set; }

//

// 摘要:

//     获取 Microsoft.VisualStudio.TestTools.WebTesting.WebTestRequest,它生成已验证的响应。

//

// 返回结果:

//     一个 Microsoft.VisualStudio.TestTools.WebTesting.WebTestRequest 对象。

public WebTestRequest Request { get; }

//

// 摘要:

//     获取所验证的 Microsoft.VisualStudio.TestTools.WebTesting.WebTestResponse。

//

// 返回结果:

//     一个 Microsoft.VisualStudio.TestTools.WebTesting.WebTestResponse 对象。

public WebTestResponse Response { get; }

//

// 摘要:

//     获取当前验证级别。

//

// 返回结果:

//     一个 Microsoft.VisualStudio.TestTools.WebTesting.ValidationLevel 枚举值。

public ValidationLevel ValidationLevel { get; }

//

// 摘要:

//     获取 Web 测试,该测试包含触发了验证事件的请求。

//

// 返回结果:

//     一个 Microsoft.VisualStudio.TestTools.WebTesting.WebTest 对象。

public WebTest WebTest { get; }

}

}

-----------------------------------------------------------------------------------------------------------------

第三步,定义事件的实现方法:在事件所在类内,或者其他类中:例如:

public override string Validate(object sender, ValidationEventArgs e)

{

e.IsValid = false;

if (!IsNullorEmpty())

{

int Eresult = (int)_sqlUtil3.ExecuteSql(_sqlInfo);

if (_sqlInfo.TestType.ToLower().Contains("negitive"))

{

if (Eresult == 0)

{

e.IsValid = false;

}

}

else if (_sqlInfo.TestType.ToLower().Contains("positive"))

{

if (Eresult == 0)

{

e.IsValid= true;

}

}

}

}

-----------------------------------------------------------------------------------------------------------------

第四步,定义一个触发事件的类并定义事件为委托类型,即事件的类型(委托类型):

public class TouchClass

{

public event EventHanlder(事件的类型为EventHanlder委托类型) DataEvent;

public WebTest_Sql     _webTeset_sql = new WebTest_Sql(); //实例化事件所在的类,一便调用事件使用;

DataEvent +=   EventHanlder(_webTeset_sql.Validate);//将事件与方法绑定,注意此处并未执行调用方法,只是将事件与方法做了绑定;

string ss = DataEvent(this,ValidationEventArgs); 或者string ss = DataEvent.invoke(this,ValidationEventArgs)//事件的执行,注意:这才是事件的执行语句。

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值