C#需要帮助理解

时间:2016-11-15 10:53:12

标签: c#

我正在做一个测试程序,它使用包装器DLL在c ++ dll上传递.net项目。我想创建一个基于表单的示例,但文档仅显示控制台中的示例。有一个特别的部分让我最困扰。

var mgr = new Pump("localhost",1,"test");
var result = mgr.Connect();
mgr.OnStart = sender => { var sga = sender.GetAllInfo(); };

发件人意味着什么,无论如何都要重写它?

...谢谢

2 个答案:

答案 0 :(得分:5)

您在此处看到的是lambda expression。简而言之,最后一行意味着:

  

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

你不喜欢它,为什么要重写它?

根据你的评论我假设你的问题中的代码实际上是在事件处理程序中调用的(例如一个按钮' s OnClick evnet处理程序),它已经采用了一个名为{{1}的参数}。

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

sender

答案 1 :(得分:0)

为了增加答案,我认为将lambda与普通方法进行比较是值得的...

示例1 - 具有单个参数且无返回值的方法

LAMBDA

...
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 - 没有参数的方法,返回值

LAMBDA

...
var getDateTime = () => DateTime.Now;

var dateTime = getDateTime();
...

正常方法

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

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