2020-07-22 为什么不在定义的时候初始化字段值

不在定义的时候初始化字段的值,是因为如果有多个构造器,那么il生成代码的时候会给每一个构造器都进行字段初始化。标记为const或者static的则不会。

using System;
public class C {
    int a=5;
    int b=3;
    
    static int mm=5;
    
    const int mmm=4;
    
    public C()
    {
        
    }
    
    public C(int a)
    {
        
    }
    
    public void M() {
    }
}

下面是部分il代码

 .method public hidebysig specialname rtspecialname 
        instance void .ctor () cil managed 
    {
        // Method begins at RVA 0x2050
        // Code size 23 (0x17)
        .maxstack 8

        IL_0000: ldarg.0
        IL_0001: ldc.i4.5
        IL_0002: stfld int32 C::a
        IL_0007: ldarg.0
        IL_0008: ldc.i4.3
        IL_0009: stfld int32 C::b
        IL_000e: ldarg.0
        IL_000f: call instance void [System.Private.CoreLib]System.Object::.ctor()
        IL_0014: nop
        IL_0015: nop
        IL_0016: ret
    } // end of method C::.ctor


.method public hidebysig specialname rtspecialname 
        instance void .ctor (
            int32 a
        ) cil managed 
    {
        // Method begins at RVA 0x2050
        // Code size 23 (0x17)
        .maxstack 8

        IL_0000: ldarg.0
        IL_0001: ldc.i4.5
        IL_0002: stfld int32 C::a
        IL_0007: ldarg.0
        IL_0008: ldc.i4.3
        IL_0009: stfld int32 C::b
        IL_000e: ldarg.0
        IL_000f: call instance void [System.Private.CoreLib]System.Object::.ctor()
        IL_0014: nop
        IL_0015: nop
        IL_0016: ret
    } // end of method C::.ctor
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。