Csharp/C#教程:C# – new()约束的generics如何生成机器代码?分享


C# – new()约束的generics如何生成机器代码?

public T Foo(U thing) where T : new() { return new T(); } 

当没有new()约束时,我理解它是如何工作的。 JIT编译器看到T,如果它是引用类型,则使用代码的对象版本,并专门针对每个值类型的情况。

如果你有一个新的T(),它是如何工作的? 它在哪里寻找?

如果你的意思是,IL看起来是什么样的,编译器将在调用Activator.CreateInstance编译。

作为T传递的类型必须具有公共无参数构造函数以满足编译器。

你可以在Try Roslyn中测试一下 :

 public static T Test() where T : class, new() { return new T(); } 

变为:

上述就是C#学习教程:C# – new()约束的generics如何生成机器代码?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 .method public hidebysig static !!T Test () cil managed { // Method begins at RVA 0x2050 // Code size 6 (0x6) .maxstack 8 IL_0000: call !!0 [mscorlib]System.Activator::CreateInstance() IL_0005: ret } // end of method C::Test 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1016762.html

(0)
上一篇 2021年12月31日
下一篇 2021年12月31日

精彩推荐