【问题标题】:+= Operator in reflector?+= 反射器中的运算符?
【发布时间】:2012-04-19 07:55:33
【问题描述】:

我试图在reflector 中找到+=,以了解它们是如何实现的:

a=+1a=a+1

但我找不到它。

有什么帮助吗?

【问题讨论】:

    标签: c# .net-4.0 reflector


    【解决方案1】:

    += 运算符在任何地方都没有实现,它是一个由编译器处理的伪运算符。 C# 编译器将a += 1 扩展为a = a + 1

    JIT 编译器然后创建最有效的代码来执行a = a + 1。如果它是一个简单的变量,它只是一个增加值的指令。

    【讨论】:

    • @RoyiNamir:可以,但是这种代码总是在某种程度上进行了优化。优化代码切换更多的是关于操作之间的关系以及如何处理存储。例如,如果这个操作是在循环中完成的,在优化开关的情况下,代码可能会在循环之前将a 变量读入寄存器,在循环期间将状态保存在寄存器中,然后将其写回变量循环。关闭开关后,每次迭代都会读取和写入该值。
    【解决方案2】:

    如果您指的是int+= 和其他内置数字类型:将没有库函数可供查看。编译器可以直接将它们翻译成 IL 指令。

    您可以尝试DateTime 结构,也可以尝试Decimal

    【讨论】:

    • 嗨,所有基本类型都不会出现在反射器中(并且由编译器直接翻译)吗?
    • henk 不是 datetime 也不是 decimal 包含 +=.
    • @RoyiNamir,你不能在 C# 中重载 +=,但它仍然可以工作。 decimal d = 1m; d += 1m; 工作正常。
    • “是否所有基本类型都没有出现在反射器中” - 不完全是,我认为您应该能够在某处找到 Int32.ToString()。尽管它可能无法管理。但是不会有Int32.Operator+
    猜你喜欢
    • 2011-03-02
    • 2010-11-11
    • 2014-08-29
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    相关资源
    最近更新 更多