c#需要帮助来理解
本文关键字:帮助 | 更新日期: 2023-09-27 18:18:03
我正在做一个测试程序,它使用包装器dll来在c++ dll上通信。net项目。我想创建一个基于表单的示例,但文档只显示控制台的示例。有一个特别的部分最让我烦恼。
var mgr = new Pump("localhost",1,"test");
var result = mgr.Connect();
mgr.OnStart = sender => { var sga = sender.GetAllInfo(); };
sender是什么意思,是否可以重写?
谢谢…
您在这里看到的是一个lambda表达式。简而言之,最后一行的意思是:
为
mgr.OnStart
分配一个处理程序,该处理程序接受一个参数sender
并执行给定的代码。代码调用sender
对象上的GetAllInfo()
方法,并将结果赋值给sga
变量。
你有什么不喜欢的,为什么你想重写它?
根据您的评论,我假设您的问题中的代码实际上本身是在事件处理程序(例如按钮的OnClick
evnet处理程序)中调用的,该处理程序已经接受了一个名为sender
的参数。
在这种情况下,只需在任意位置重命名参数名称,例如:
mgr.OnStart = sndr => { var sga = sndr.GetAllInfo(); };
为了补充答案,我认为有必要展示lambdas与普通方法的比较…
示例1 -单参数无返回值的方法λ
...
mgr.OnStart = sender => { var sga = sender.GetAllInfo(); };
...
正常的方法...
mgr.OnStart = this.Mgr_Start;
...
private void Mgr_Start(object sender)
{
var sga = sender.GetAllInfo();
}
注意上述方法的参数类型为object
。这需要根据OnStart
的委托的签名进行更改。
示例2 -不带参数的方法,返回值
λ
...
var getDateTime = () => DateTime.Now;
var dateTime = getDateTime();
...
正常的方法...
var dateTime = this.GetDateTime();
...
private DateTime GetDateTime()
{
return DateTime.Now;
}