C# 线程构造函数中的委托声明

C# 线程构造函数中的委托声明,c#,delegates,C#,Delegates,我遇到了以下代码: bool success = true; Thread connectThread = new Thread(delegate() { success = TryConnectingToAnalysisServer(connectionString); }); 我从未见过代表的这种语法,有人能解释一下吗?这是一个匿名代表。不必编写一个单独的函数,这是在C 1.0版中必须编写的: void MainMethod() { bool success = true;

我遇到了以下代码:

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

我从未见过代表的这种语法,有人能解释一下吗?

这是一个匿名代表。不必编写一个单独的函数,这是在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); 
    });
}
它叫。 所发生的事情是编译器在幕后为您生成一个具有正确委托签名的命名方法。因此编译器生成一个方法:

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

我建议您仔细阅读,并研究一下

google=>Anonymous Methods您是否可以在文档中查找C语言中的delegate关键字?它应该讨论这个语法。