“静态”会影响代码解析吗?

时间:2019-05-28 19:12:16

标签: c# .net

我正在研究.net框架,其中一种情况使我感到困惑。你能帮我调查一下吗?

因此,我了解了Tasks并注意到编译器可以解析此类代码

var tsk = new Task(Foo);

Foo在哪里

void Foo() {//smth}

但是

var tsk = Task.Run(Foo);

带下划线的红色,编译器说我不能使用void代替action,而是将其替换为:

var tsk = Task. Run(()=>Foo());

那很好。

这很奇怪,因为Task和static Run的构造函数具有相同的输入参数-Action委托。

所以我用dnSpy分解了我的代码,并且看到了以下内容:

Task tsk = new Task(new Action(MainClass.Rn));

Task.Run(delegate()
{
    MainClass.Rn();
});

在这里,我有第一个问题: 在使用静态Run方法的情况下,为什么编译器无法将方法自动包装为动作委托?

第二个问题:

dnSpy提供给我的已解析代码与Roslyn或其他vs编译器所解析的代码是否相同,还是只是试图猜测可能会如何?

0 个答案:

没有答案