在线程构造函数中委托声明

时间:2014-05-13 19:34:30

标签: c# delegates

我遇到了这段代码:

bool success = true;
Thread connectThread = new Thread(delegate() { success = TryConnectingToAnalysisServer(connectionString); });

我从未在代表中看到这种语法,有人可以解释一下吗?

2 个答案:

答案 0 :(得分:0)

这是一位匿名代表。而不必编写一个单独的函数,这是您在C#版本1.0中所必需的:

void MainMethod()
{
    bool success = true;
    Thread connectThread = new Thread(new ThreadStart(thread_start));
}
void thread_start() {
    success = TryConnectingToAnalysisServer(connectionString); 
}

使用C#2.0,您现在可以使用匿名方法更紧凑地编写它:

void MainMethod()
{
    bool success = true;
    Thread connectThread = new Thread(delegate() {
        success = TryConnectingToAnalysisServer(connectionString); 
    });
}

使用C#3.0,您可以使用lambda表达式稍微更紧凑地编写它:

void MainMethod()
{
    bool success = true;
    Thread connectThread = new Thread(() => {
        success = TryConnectingToAnalysisServer(connectionString); 
    });
}

答案 1 :(得分:0)

它被称为Annonymous Methods。 发生了什么事情是编译器在幕后使用委托的正确签名为您生成命名方法。所以编译器生成一个方法:

public void <__k_method()
{
   success = TryConnectingToAnalysisServer(connectionString)
}

我建议您阅读,并查看Lambda Expressions