【问题标题】:What does the symbol <> mean in MSIL?MSIL 中的符号 <> 是什么意思?
【发布时间】:2013-03-31 12:16:32
【问题描述】:

反编译后有这段代码

    SampleClass sampleClass;
    SampleClass <>g__initLocal0;
    int y;
    sampleClass = null;
Label_0018:
    try
    {
        <>g__initLocal0 = new SampleClass();
        <>g__initLocal0.X = 5;
        <>g__initLocal0.Y = 10;
        sampleClass = <>g__initLocal0;
        goto Label_003A;
    }
    catch (Exception)
    {
    Label_0035:
        goto Label_003A;
    }
Label_003A:
    y = sampleClass.Y;

在某些操作之前,我不知道运算符/符号 是什么意思。有人知道吗?

【问题讨论】:

    标签: c# .net cil


    【解决方案1】:

    这是一个编译器生成的名称 - &lt;&gt; 字符对于 IL 中的标识符是合法的,但在 C# 中是不合法的。因此,编译器知道它可以生成包含此类字符的名称,而不会与您在代码中使用的名称发生冲突。

    在这种特殊情况下,&lt;&gt;g__initLocal0 是一个新变量,它被引入用于保存正在使用initializer syntax 初始化的类的新构造实例。原来的代码是:

    sampleClass = new SampleClass() { X = 5, Y = 10};
    

    引入它是为了避免 sampleClass 被部分构造的实例观察到 - 在 new SampleClass() 执行之后但在对 XY 的分配发生之前。 IE。如果Y = 10 抛出异常,它会确保sampleClass 保持null 而不是新的SampleClassX 设置为 5,Y 的值未知。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-29
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2014-05-11
    • 1970-01-01
    相关资源
    最近更新 更多