在C#中,无法定义仅在 ref 和 out 方面不同的重载.据说是生成的IL相同.以下是两段IL:1.参数为ref.method private hidebysig static void func(int32& x) cil managed
{
// 代码大小 4 (0x4)
.maxstack 2
IL_0000: ldarg.0
IL_0001: ldc.i4.0
IL_0002: stind.i4
IL_0003: ret
} // end of method Demo::func
2.参数为out.method private hidebysig static void func([out] int32& x) cil managed
{
// 代码大小 4 (0x4)
.maxstack 2
IL_0000: ldarg.0
IL_0001: ldc.i4.0
IL_0002: stind.i4
IL_0003: ret
} // end of method Demo::func
这两段IL的唯一区别就是第二种多了[out].这个是可以省略的意思吗?对于IL不了解,请问在哪里可以找到有关的解释呢?
{
// 代码大小 4 (0x4)
.maxstack 2
IL_0000: ldarg.0
IL_0001: ldc.i4.0
IL_0002: stind.i4
IL_0003: ret
} // end of method Demo::func
2.参数为out.method private hidebysig static void func([out] int32& x) cil managed
{
// 代码大小 4 (0x4)
.maxstack 2
IL_0000: ldarg.0
IL_0001: ldc.i4.0
IL_0002: stind.i4
IL_0003: ret
} // end of method Demo::func
这两段IL的唯一区别就是第二种多了[out].这个是可以省略的意思吗?对于IL不了解,请问在哪里可以找到有关的解释呢?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货