C#需要帮助才能理解 我正在做一个测试程序,它使用包装DLL在C++ DLL上传送.NET项目。我想创建一个基于表单的示例,但文档仅显示控制台中的示例。有一个特别的部分最让我困扰 var mgr = new Pump("localhost",1,"test"); var result = mgr.Connect(); mgr.OnStart = sender => { var sga = sender.GetAllInfo(); };

C#需要帮助才能理解 我正在做一个测试程序,它使用包装DLL在C++ DLL上传送.NET项目。我想创建一个基于表单的示例,但文档仅显示控制台中的示例。有一个特别的部分最让我困扰 var mgr = new Pump("localhost",1,"test"); var result = mgr.Connect(); mgr.OnStart = sender => { var sga = sender.GetAllInfo(); };,c#,C#,发送者的意思是什么?是否有重写它的方法 谢谢…您在这里看到的是一个。简而言之,最后一行的意思是: 为mgr.OnStart分配一个处理程序,该处理程序接受一个参数sender,并执行给定的代码。代码调用sender对象上的GetAllInfo()方法,并将结果分配给sga变量 你不喜欢它的什么地方?为什么要重写它 根据您的评论,我假设问题中的代码实际上是在事件处理程序(例如按钮的OnClickevnet处理程序)中调用的,该事件处理程序已经使用了名为sender的参数 在这种情况下,只需在任一

发送者的意思是什么?是否有重写它的方法

谢谢…

您在这里看到的是一个。简而言之,最后一行的意思是:

mgr.OnStart
分配一个处理程序,该处理程序接受一个参数
sender
,并执行给定的代码。代码调用
sender
对象上的
GetAllInfo()
方法,并将结果分配给
sga
变量

你不喜欢它的什么地方?为什么要重写它


根据您的评论,我假设问题中的代码实际上是在事件处理程序(例如按钮的
OnClick
evnet处理程序)中调用的,该事件处理程序已经使用了名为
sender
的参数

在这种情况下,只需在任一位置重命名参数名称,例如:

mgr.OnStart = sndr => { var sga = sndr.GetAllInfo(); };

为了补充答案,我认为值得展示lambdas与普通方法的比较

示例1-具有单个参数且无返回值的方法 兰姆达 常规方法 请注意,上述方法的参数类型为
object
。这需要根据
OnStart
的代表的签名进行更改

示例2-不带参数、返回值的方法 兰姆达 常规方法
sender
是附加到事件(或可能委托)的匿名(lambda)函数的第一个(也是唯一一个)参数
OnStart
。通常情况下,事件处理程序由
对象发送方
(在本例中,它可能是
)和EventArgs(或者不是,在本例中)组成。您可以将lambda函数重写为一个实方法,将发送方作为其唯一的参数,并将其分配给OnStart。检查OnStart的定义,找出发送者应该是什么类型。下次,如果您收到错误消息,请直接将它们添加到问题中,而不是让人们猜测真正的问题可能是什么。为了完整性起见,对于lambda表达式文档:-),每当我使用该代码时,它都会返回错误“无法在此作用域中声明名为“sender”的本地或参数,因为该名称在封闭的本地作用域中用于定义本地或参数“我不知道它是什么。@raven编辑了我的答案。@raven然后重命名它。让我猜猜:你把这个代码放在一个按钮或类似的东西里面?已使用
对象发送器的函数
...
mgr.OnStart = sender => { var sga = sender.GetAllInfo(); };
...
...
mgr.OnStart = this.Mgr_Start;
...

private void Mgr_Start(object sender)
{
    var sga = sender.GetAllInfo();
}
...
var getDateTime = () => DateTime.Now;

var dateTime = getDateTime();
...
...
var dateTime = this.GetDateTime();
...

private DateTime GetDateTime()
{
    return DateTime.Now;
}