扒开腿挺进岳湿润的花苞视频|将军边走边挺进她H树林|挺进朋友人妻张婉莹身体|岳脱得精光让我挺进去视频|第一次挺进莹莹的身体里视频|脱岳裙子从后面挺进去视频

新疆軟件開發(fā)

本站首頁 軟件開發(fā) 成功案例 公司新聞 公司簡(jiǎn)介 客服中心 軟件技術(shù) 網(wǎng)站建設(shè)
  您現(xiàn)在的位置: 新疆二域軟件開發(fā)公司 >> .Net技術(shù) >> 文章正文

C#中“+”的兩種功能

C#學(xué)習(xí)中,我們應(yīng)該都知道"+"號(hào)的使用方法,今天我們就來談一談它的使用,一般情況下認(rèn)為"+"操作符有兩種功能,一種是做算術(shù)加,一種是做字符串的連接。

  今天看到一份文檔說,深入解析C#中兩個(gè)PLUS操作符執(zhí)行的不同操作,想了想,也的確應(yīng)該是這樣,IL代碼實(shí)例也表面這個(gè)觀點(diǎn)是正確的:

我們先寫一小段測(cè)試代碼:
namespace MSILTest
{
 class Program
 {
 static void Main(string[] args)
 {
 string a = "aaa"; 
 string b = a + "bbb"; 
 System.Console.WriteLine(b); 
 int c = 1; 
 int d = c + 1; 
 System.Console.WriteLine(d); 
 }
 }
}

  反編譯得到IL代碼:

.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 40 (0x28)
.maxstack 2
.locals init ([0] string a,
[1] string b,
[2] int32 c,
[3] int32 d)
IL_0000: nop
IL_0001: ldstr "aaa"
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: ldstr "bbb"
IL_000d: call string [mscorlib]System.String::Concat(string,
string)
IL_0012: stloc.1
IL_0013: ldloc.1
IL_0014: call void [mscorlib]System.Console::WriteLine(string)
IL_0019: nop
IL_001a: ldc.i4.1
IL_001b: stloc.2
IL_001c: ldloc.2
IL_001d: ldc.i4.1
IL_001e: add
IL_001f: stloc.3
IL_0020: ldloc.3
IL_0021: call void [mscorlib]System.Console::WriteLine(int32)
IL_0026: nop
IL_0027: ret
} // end of method Program::Main

  從上面的代碼中可以看到,在+連接字符串的時(shí)候,C#的Complier是把它轉(zhuǎn)換成為了帶兩個(gè)參數(shù)的Concat()函數(shù)。這個(gè)函數(shù)可以反編譯System.dll可以看到這個(gè)靜態(tài)的帶兩個(gè)參數(shù)的方法。

  而+在handle兩個(gè)number的時(shí)候,是直接轉(zhuǎn)換成為add操作指令的。
這“兩個(gè)”操作指令,完全沒有一點(diǎn)相似的地方。所以,我們需要把這不同功能的兩個(gè)+當(dāng)成是兩個(gè)運(yùn)算符來看待。

  同時(shí),我們還可以稍為引申一下,關(guān)于C#中的強(qiáng)制類型轉(zhuǎn)換:
大家看這一句:
IL_0021: call 
void [mscorlib]System.Console::WriteLine(int32)
如果我們把
System.Console.WriteLine(d); 
改成
System.Console.WriteLine(’\u0041’); 
相應(yīng)的IL代碼就會(huì)轉(zhuǎn)變成為:
IL_0020: ldc.i4.s 65
IL_0022: call void [mscorlib]System.Console::WriteLine(char)

 由此我們可以得到結(jié)論:
  強(qiáng)制類型轉(zhuǎn)換,只不過是調(diào)用了一些方法的不同的重載的方法,而這個(gè)值本身是沒有變的。

  這個(gè)值在Stack的頂部,轉(zhuǎn)換前后都不變,只是編譯器來根據(jù)強(qiáng)制類型轉(zhuǎn)換相應(yīng)的代碼來選擇不同方法的不同的重載版本。

  跟蹤堆棧頂部數(shù)值,得到的結(jié)果也支持我們的這個(gè)結(jié)論。

作者:未知 | 文章來源:未知 | 更新時(shí)間:2007-11-12 16:44:16

  • 上一篇文章:

  • 下一篇文章:

  • 相關(guān)文章:
    j2se 嵌入式腳本抓取引擎
    NET Framework 2.0 Service Pack 2下載地址
    C#實(shí)現(xiàn)短信發(fā)送程序的例子
    .net學(xué)習(xí):c#事件的深入分析
    基礎(chǔ)學(xué)習(xí):java中使用存儲(chǔ)過程
    C#如何設(shè)置或者獲取目錄的權(quán)限?
    解析c#語言和java語言最相似的地方
    C#中如何才能調(diào)用QTP自動(dòng)化對(duì)象
    解析.NET中的6各大的安全錯(cuò)誤
    C#如何轉(zhuǎn)換AVI文件為BMP位圖文件
    軟件技術(shù)
    · 開發(fā)語言
    · Java技術(shù)
    · .Net技術(shù)
    · 數(shù)據(jù)庫開發(fā)
    最新文章  
    ·.net技術(shù) asp.net MVC3 Vi
    ·.net將視頻文件格式轉(zhuǎn)換成
    ·NET Framework 2.0 Servic
    ·如何動(dòng)態(tài)修改winform的app
    ·asp,net軟件結(jié)構(gòu)設(shè)計(jì)和相關(guān)
    ·學(xué)習(xí)怎樣使用ASP.NET中的虛
    ·,net基礎(chǔ)類的學(xué)習(xí):system
    ·.net學(xué)習(xí):c#事件的深入分
    ·Facade Pattern學(xué)習(xí)總結(jié)
    ·C#如何設(shè)置或者獲取目錄的
    ·如何使用XSL來定義ASP.NET
    ·理解WCF Data Contract契約
    ·如何能在.net2.0開發(fā)的控件
    ·模式怎樣使用,講解模式的
    ·如何解決Menu菜單被frame遮
    關(guān)于我們 | 軟件開發(fā) | 下載試用 | 客服中心 | 聯(lián)系我們 | 友情鏈接 | 網(wǎng)站地圖 | 新疆電子地圖 | RSS訂閱
    版權(quán)所有 © 2016 新疆二域軟件開發(fā)網(wǎng) m.jdtbank.com All Rights Reserved 新ICP備14003571號(hào)
    新疆軟件開發(fā)總機(jī):0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆烏魯木齊北京中路華聯(lián)大廈A-5C 郵編:830000
     
    衡阳市| 湖北省| 道孚县| 彭阳县| 涟水县| 汕头市| 彩票| 镇赉县| 金坛市| 黎城县| 晋城| 南昌市| 天台县| 姚安县| 怀远县| 晴隆县| 河曲县| 浠水县| 拉萨市| 舒城县| 固镇县| 海原县| 登封市| 冀州市| 海晏县| 丹江口市| 涟水县| 阳城县| 自治县| 荥阳市| 若尔盖县| 三门县| 安丘市| 新疆| 朝阳区| 长丰县| 卢氏县| 弥勒县| 石城县| 牡丹江市| 靖安县|