偶然看到MSDN關于 += 賦值運算符 的備注:
使用 += 賦值運算符的表達式,如
x += y
等效于
x = x + y
不同的是 x 只計算一次。 + 運算符的含義取決于 x 和 y 的類型(對于數值操作數,其含義為相加;對于字符串操作數,其含義為串聯,等等)。
不能直接重載 += 運算符,但用戶定義的類型可重載 + 運算符(請參見 Operator)。
+= 運算符還用于指定響應事件時要調用的方法;這類方法稱為事件處理程序。 在此上下文中使用 += 運算符稱為“訂閱事件”。 有關更多信息,請參見 如何:訂閱和取消訂閱事件(C# 編程指南)。 和委托(C# 編程指南)。
以上來源:MSDN
但上面說明使用 += 運算符時,x只計算一次…
新建一Demo:
static void Demo() { int x, y; x = 1; y = 2; x = x + y; Console.WriteLine(x); x = 1; y = 2; x += y; Console.WriteLine(x); }
反編譯IL代碼:
.method PRivate hidebysig static void Demo () cil managed { // Method begins at RVA 0x28a4 // Code size 32 (0x20) .maxstack 2 .locals init ( [0] int32 x, [1] int32 y ) IL_0000: nop IL_0001: ldc.i4.1 IL_0002: stloc.0 IL_0003: ldc.i4.2 IL_0004: stloc.1 IL_0005: ldloc.0 IL_0006: ldloc.1 IL_0007: add IL_0008: stloc.0 IL_0009: ldloc.0 IL_000a: call void [mscorlib]System.Console::WriteLine(int32) IL_000f: nop IL_0010: ldc.i4.1 IL_0011: stloc.0 IL_0012: ldc.i4.2 IL_0013: stloc.1 IL_0014: ldloc.0 IL_0015: ldloc.1 IL_0016: add IL_0017: stloc.0 IL_0018: ldloc.0 IL_0019: call void [mscorlib]System.Console::WriteLine(int32) IL_001e: nop IL_001f: ret} // end of method Program::Demo
//本文地址:http://www.49028c.com/Interkey/p/3590631.html
但其IL代碼一樣.
不僅是 += 運算符,-= 運算符………|= 運算符 都是x只計算一次。
那為何會只計算一次呢?糾結…
期待后續有個結果…[暫時未解]
推薦一個非常實用的文件及文件夾比較工具: Beyond Compare。
使用 Beyond Compare 可以很方便的對比出兩個文件夾或者文件的不同之處。并把相差的每一個字節用顏色加以表示,查看方便。并且支持多種規則對比。對軟件漢化者來說,這絕對是一款不可多得的工具。
新聞熱點
疑難解答