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是什么意思,是否可以重写?

谢谢…

c#需要帮助来理解

您在这里看到的是一个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;
}