中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁 > 技術(shù)文檔 > 網(wǎng)絡(luò)編程 > Visual C# .NET2003語言的改變
vbscript 錯誤代碼對應(yīng)解釋大全 回到列表 使用 cookies 做一個簡單計(jì)數(shù)器
 Visual C# .NET2003語言的改變

作者:Prashant Sridharan 時間: 2003-05-05 文檔類型:原創(chuàng) 來自:Microsoft

摘要:為了與歐洲計(jì)算機(jī)制造商協(xié)會 (ECMA) 的 C# 規(guī)范完全兼容,Microsoft Corporation 對 C# 編譯器的實(shí)現(xiàn)進(jìn)行了幾處改動。這些改動將在多方面影響現(xiàn)有的代碼,因此用戶必須檢查他們的代碼以確保這些代碼符合 C# 編程語言必需的和推薦的使用要求。

目錄

  • 背景
  • C# 語言的新功能
  • 實(shí)現(xiàn)的改變
  • 小結(jié)

    背景

    2001 年年底,ECMA 將 C# 編程語言批準(zhǔn)為一項(xiàng)標(biāo)準(zhǔn) (ECMA-334)。為了與 Microsoft 在 C# 和公共語言接口 (CLI) 標(biāo)準(zhǔn)化進(jìn)程方面的舉措保持一致,Microsoft 遵循 ECMA C# 標(biāo)準(zhǔn)的精神和文字規(guī)范對 C# 編譯器進(jìn)行了幾處小的改動。另外,Microsoft 在遵循 C# 標(biāo)準(zhǔn)規(guī)范的同時對 C# 實(shí)現(xiàn)作了一些額外的小改動,并更正了 C# 程序員遇到的一些編譯器問題和錯誤。其中的每處改動都可能導(dǎo)致使用 Visual C# .NET 2002 版編譯器編寫的代碼在用于 Visual C# .NET 2003 之前必須進(jìn)行修改。

    C# 語言的新功能

    Visual C# .NET 2003 版的 C# 語言中添加了兩個新功能。第一,編譯器現(xiàn)在支持 #line hidden 預(yù)處理器指令。#line hidden 指令主要用于源代碼生成器,它通知編譯器忽略緊跟在 #line hidden 指令后面的所有代碼行的調(diào)試程序信息,直到遇到下一個 #line 指令為止(該 #line 指令的調(diào)試程序信息也一并被忽略),這里假設(shè)它們中間不會立即碰到下一個 #line hidden 預(yù)處理指令。在下面的示例中,編譯器生成了 IL 代碼,其中的 WriteLine 語句不包含調(diào)試信息。這樣,調(diào)試應(yīng)用程序的程序員將無法查看“隱藏”的代碼并檢查其中的內(nèi)容:

    public class Customer
    {
       public static void Main()
       {
          MyClass c = new MyClass();
    
          c.ExecuteCommand();
    
          #line hidden
          Console.WriteLine("顯示一些文字");
          Console.WriteLine("顯示一些文字");
          Console.WriteLine("顯示一些文字");
          #line
    
          c.ProcessCommand();
    
          c.Close();
       }
    }

    然而,#line hidden 指令并不隱藏編譯器錯誤。當(dāng)然,編譯器仍然將代碼編譯到 IL 中,且代碼仍舊執(zhí)行;編譯器只是禁止調(diào)試程序進(jìn)入它的內(nèi)容。

    第二個 C# 新功能涉及 XML 注釋,是根據(jù) ECMA 標(biāo)準(zhǔn)添加的。C# 現(xiàn)在支持在使用“斜線和星號”符號(/**/)編寫的多行注釋中添加 XML 注釋。下面的 XML 注釋在 2003 版的 C# 編譯器中是合法的:

    /**
    <summary>這是
    注釋
    
    </summary>
    */

    此外,出于完整性的考慮(但實(shí)際上絕不推薦),程序員可以混合并匹配注釋樣式,同時仍然能夠編寫出有效的 XML 注釋代碼。這樣,下面的這個注釋聲明現(xiàn)在也是合法的:

    /**
    <summary>這是
    注釋
    */
    /// </summary>

    實(shí)現(xiàn)的改變

    2003 版的 C# 編譯器和 2002 版也有微小的區(qū)別。在有些情況下,這些區(qū)別可能會導(dǎo)致代碼無法編譯,或?qū)е缕溥\(yùn)行方式與應(yīng)執(zhí)行的方式大相徑庭。

    “Foreach”語句的改變

    現(xiàn)在,foreach 語句可以動態(tài)地檢查它所迭代的數(shù)據(jù)結(jié)構(gòu)中是否存在 IDisposable 接口。以前,編譯器從不動態(tài)地檢查 Idisposable 接口是否存在,除非從 GetEnumerator 返回的類型已實(shí)現(xiàn)了 IEnumerator 接口。然而,如果此類型對于實(shí)現(xiàn) Idisposable 是靜態(tài)已知的,則編譯器將一直調(diào)用 Dispose。換句話說,如果迭代程序類型實(shí)現(xiàn)了枚舉器設(shè)計(jì)模式,但沒有專門實(shí)現(xiàn) IEnumerator 接口,編譯器就不會調(diào)用 Dispose 方法,除非 iterator 類型對于實(shí)現(xiàn) IDisposable 接口是靜態(tài)已知的。

    現(xiàn)在,編譯器在檢測是否存在 IDisposable 接口時,無論迭代程序類型是否實(shí)現(xiàn) IEnumerator,都將調(diào)用 Dispose 方法(如果已實(shí)現(xiàn))。在下面的示例中,Visual C# .NET 2002 編譯器未調(diào)用 Dispose 方法,但 Visual C# .NET 2003 編譯器調(diào)用了該方法:

    abstract class Base
    {
       public int Current { get; }
       public bool MoveNext();
    }
    
    class Derived: Base, IDisposable
    {
       // Base 和 IDisposable 的實(shí)現(xiàn)
    }
    
    class MyClass
    {
       public Base GetEnumerator()
       {
          return new Derived();
       }
    }

    當(dāng) foreach 語句在某個對象集合中使用迭代時,它將執(zhí)行 GetEnumerator 方法并接收轉(zhuǎn)換為 Base 類型的 Derived 實(shí)例作為它的迭代程序類型。當(dāng)然,Base 類型無需為了調(diào)用它的 CurrentMoveNext 方法而實(shí)現(xiàn) Ienumerator 接口。在早期編譯器中,Derived 類型的 Dispose 方法不被調(diào)用,因?yàn)樗粚?shí)現(xiàn) IEnumerator,并且類 Base 對于實(shí)現(xiàn) Idisposable 不是靜態(tài)已知的。在新的編譯器中,Dispose 方法被調(diào)用,因?yàn)榫幾g器在所有 foreach 語句的迭代程序類型中檢查是否存在 Idisposable 接口。由于 GetEnumerator 調(diào)用的結(jié)果是一個轉(zhuǎn)換為 Base 類型的 Derived 類型,并且由于 Derived 類型實(shí)現(xiàn) Idisposable 接口,因此編譯器動態(tài)檢查 Idisposable 接口是否存在,會導(dǎo)致對 Dispose 方法的調(diào)用。

    屬性聲明的改變

    ECMA C# 標(biāo)準(zhǔn)明確禁止為相應(yīng)的屬性創(chuàng)建獲取和設(shè)置函數(shù)。實(shí)際上,C# 編譯器將屬性聲明轉(zhuǎn)換為獲取和設(shè)置函數(shù),以便不支持屬性的語言也可以訪問數(shù)據(jù)。因此,下面的代碼是無效的,因?yàn)榫幾g器會產(chǎn)生 get_Propset_Prop 方法,而這兩個方法與用戶聲明的方法發(fā)生沖突:

    public class MyClass
    {
       public int Prop
       {
          get
          {
          }
    
          set
          {
          }
       }
    
       // 現(xiàn)在屬于非法函數(shù)
       public int get_Prop()
       {
       }
    
       // 現(xiàn)在屬于非法函數(shù)
       public void set_Prop(int val)
       {
       }
    }

    以前,C# 編譯器允許創(chuàng)建此類函數(shù),顯然這是一個軟件錯誤。2003 版的 C# 編譯器糾正了這個錯誤。

    作為此編譯器錯誤糾正的必然結(jié)果,C# 編譯器將不再允許顯式創(chuàng)建生成屬性的獲取和設(shè)置函數(shù)(如果將屬性定義為接口實(shí)現(xiàn)的結(jié)果)。在下面的示例中,2003 版的 C# 編譯器不再允許在 Derived 類中顯式實(shí)現(xiàn) IMyInterface.get_PropIMyInterface.set_Prop 方法:

    interface IMyInterface
    {
       public int Prop { get; set; }
    }
    
    public class Derived : IMyInterface
    {
       public int Prop
       {
          get
          {
          }
    
          set
          {
          }
       }
    
       // 非法
       public int IMyInterface.get_Prop()
       {
       }
    
       // 非法
       public void IMyInterface.set_Prop(int val)
       {
       }
    }

    其他改變

    C# 編譯器的早期版本允許不兼容地使用屬性。2003 版的 C# 編譯器已經(jīng)糾正了這些用法,因此更符合 ECMA 規(guī)范。首先是對 C# 編譯器進(jìn)行了糾正,不允許在其參數(shù)列表中使用未在屬性類聲明中聲明為 public 的命名參數(shù)。例如,如果某個 AuthorAttribute 類是使用名為 authorName 的私有字段創(chuàng)建的,則下面的語句在 C# 編譯器的早期版本中是允許的,但在 C# 2003 編譯器中卻會導(dǎo)致錯誤:

    [Author(authorName="microsoftuser")]
    public class MyClass
    {
    }

    第二,ObsoleteAttribute 現(xiàn)在可以應(yīng)用到運(yùn)算符,這樣程序員就可以使重載的運(yùn)算符函數(shù)失效。最后,編譯器以前對于無法識別的屬性位置常常生成一個錯誤,而現(xiàn)在則根據(jù) ECMA C# 規(guī)范的要求只生成一個警告。

    另外,C# 編譯器以前接受用戶定義的移位運(yùn)算符參數(shù)(<< 和 >>),而根據(jù) ECMA C# 規(guī)范,這些參數(shù)是無效的。例如,移位運(yùn)算符以前可以按以下方式進(jìn)行聲明,即將封裝類的類型聲明為第二個操作數(shù):

    public class MyClass
    {
       public static MyClass operator <<(int I, MyClass c) 
       {
       }
     
       public static void Main()
       {
       }
    }

    按照規(guī)范,如果向左移位運(yùn)算符被重載,則二進(jìn)制運(yùn)算符的操作數(shù)列表中的第一個參數(shù)必須為封裝類型。同樣,如果向右移位運(yùn)算符被重載,則二進(jìn)制運(yùn)算符的操作數(shù)列表中的第二個參數(shù)必須為封裝類型。下面的代碼示例演示了向左移位運(yùn)算符的正確聲明方式:

    public class MyClass
    {
       public static MyClass operator <<( MyClass c, int i) 
       {
       }
     
       public static void Main()
       {
       }
    }

    最后,還加入了幾個用于糾正編譯器錯誤的修復(fù),包括:

  • 對顯式賦值算法的糾正,使編譯器對于符合 ECMA C# 規(guī)范的代碼不再報錯。
  • 枚舉類型現(xiàn)在可以轉(zhuǎn)換為字符(詳見 ECMA C# 規(guī)范中的說明)。
  • 內(nèi)部虛警告已被刪除,因?yàn)閮?nèi)部虛函數(shù)無法在程序集外被重寫。

    小結(jié)

    C# 編譯器以不同的方式實(shí)現(xiàn)了幾個功能,從而獲得了比前一版更高的性能。但這些改進(jìn)不會影響對代碼的編譯和執(zhí)行:

  • 在迭代字符串的元素時,foreach 語句現(xiàn)在使用字符串的索引器而非枚舉器模式,這樣使性能更佳。
  • 現(xiàn)在,C# 編譯器在處理浮點(diǎn)運(yùn)算和十進(jìn)制數(shù)學(xué)運(yùn)算方面更嚴(yán)格地遵循 ECMA C# 規(guī)范。
  • 幾個軟件錯誤已被修復(fù),使控制流得到優(yōu)化。
  • 出處:Microsoft
    責(zé)任編輯:藍(lán)色

    ◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論

    作者文章
    Visual C# .NET2003語言的改變
    關(guān)鍵字搜索 常規(guī)搜索 推薦文檔
    熱門搜索:CSS Fireworks 設(shè)計(jì)比賽 網(wǎng)頁制作 web標(biāo)準(zhǔn) 用戶體驗(yàn) UE photoshop Dreamweaver Studio8 Flash 手繪 CG
    站點(diǎn)最新 站點(diǎn)最新列表
    周大!熬•自然”設(shè)計(jì)大賽開啟
    國際體驗(yàn)設(shè)計(jì)大會7月將在京舉行
    中國國防科技信息中心標(biāo)志征集
    云計(jì)算如何讓安全問題可控
    云計(jì)算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機(jī)會
    阿里行云
    云手機(jī)年終巨獻(xiàn),送禮標(biāo)配299起
    阿里巴巴CTO王堅(jiān)的"云和互聯(lián)網(wǎng)觀"
    1499元買真八核 云OS雙蛋大促
    首屆COCO桌面手機(jī)主題設(shè)計(jì)大賽
    欄目最新 欄目最新列表
    淺談JavaScript編程語言的編碼規(guī)范
    如何在illustrator中繪制臺歷
    Ps簡單繪制一個可愛的鉛筆圖標(biāo)
    數(shù)據(jù)同步算法研究
    用ps作簡單的作品展示頁面
    CSS定位機(jī)制之一:普通流
    25個最佳最閃亮的Eclipse開發(fā)項(xiàng)目
    Illustrator中制作針線縫制文字效果
    Photoshop制作印刷凹凸字體
    VS2010中創(chuàng)建自定義SQL Rule

    藍(lán)色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨(dú)家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點(diǎn)的原創(chuàng)文章,但原作者和來自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

    轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請不要盜鏈到本站,且不準(zhǔn)打上各自站點(diǎn)的水印,亦不能抹去我站點(diǎn)水印。

    特別注意:本站所提供的攝影照片,插畫,設(shè)計(jì)作品,如需使用,請與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請與我們聯(lián)系,我們將立即刪除修改。

    您的評論
    用戶名:  口令:
    說明:輸入正確的用戶名和密碼才能參與評論。如果您不是本站會員,你可以注冊 為本站會員。
    注意:文章中的鏈接、內(nèi)容等需要修改的錯誤,請用報告錯誤,以利文檔及時修改。
    不評分 1 2 3 4 5
    注意:請不要在評論中含與內(nèi)容無關(guān)的廣告鏈接,違者封ID
    請您注意:
    ·不良評論請用報告管理員,以利管理員及時刪除。
    ·尊重網(wǎng)上道德,遵守中華人民共和國的各項(xiàng)有關(guān)法律法規(guī)
    ·承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
    ·本站評論管理人員有權(quán)保留或刪除其管轄評論中的任意內(nèi)容
    ·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
    ·參與本評論即表明您已經(jīng)閱讀并接受上述條款
    推薦文檔 | 打印文檔 | 評論文檔 | 報告錯誤  
    專業(yè)書推薦 更多內(nèi)容
    網(wǎng)站可用性測試及優(yōu)化指南
    《寫給大家看的色彩書1》
    《跟我去香港》
    眾妙之門—網(wǎng)站UI 設(shè)計(jì)之道
    《Flex 4.0 RIA開發(fā)寶典》
    《贏在設(shè)計(jì)》
    犀利開發(fā)—jQuery內(nèi)核詳解與實(shí)踐
    作品集 更多內(nèi)容

    雜⑦雜⑧ Gold NORMANA V2