C# +;=反射器中的操作员?
我试图在C# +;=反射器中的操作员?,c#,.net-4.0,reflector,C#,.net 4.0,Reflector,我试图在reflector中找到+=,看看它们是如何实现的: a=+1vsa=a+1 但是我找不到它 有什么帮助吗?如果您指的是int的+=和其他内置数字类型:将没有库函数可查看。编译器可以将它们直接转换为IL指令 您可以尝试DateTime结构,也可以尝试Decimal。任何地方都没有+=运算符的实现,它是由编译器处理的伪运算符。C编译器将a+=1扩展为a=a+1 然后,JIT编译器创建最有效的代码来执行a=a+1。如果它是一个简单的变量,它将只是一条增加值的指令。嗨,亨克,所有的基类型都不会
reflector
中找到+=
,看看它们是如何实现的:
a=+1
vsa=a+1
但是我找不到它
有什么帮助吗?如果您指的是
int
的+=
和其他内置数字类型:将没有库函数可查看。编译器可以将它们直接转换为IL指令
您可以尝试
DateTime
结构,也可以尝试Decimal
。任何地方都没有+=
运算符的实现,它是由编译器处理的伪运算符。C编译器将a+=1
扩展为a=a+1
然后,JIT编译器创建最有效的代码来执行
a=a+1
。如果它是一个简单的变量,它将只是一条增加值的指令。嗨,亨克,所有的基类型都不会出现在reflector中(并由编译器直接翻译)?亨克不是datetime或decimal包含+=。@RoyiNamir,你不能在C#中重载+=
,但它仍然可以工作<代码>十进制d=1m;d+=1m代码>工作正常。“是否所有基类型都没有出现在reflector中”-不完全是,我认为您应该能够在某个地方找到Int32.ToString()。尽管它可能无法管理。但是不会有Int32.Operator+
@RoyiNamir:可以,但是这种代码总是在某种程度上得到优化。优化代码开关更多地是关于操作之间的关系以及如何处理存储。例如,如果在循环中执行此操作,则在打开优化开关的情况下,代码可能会在循环之前将变量读入寄存器,在循环期间将状态保留在寄存器中,并在循环之后将其写回变量。关闭该开关后,每次迭代都会读取和写入该值。