• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 11, 文章 - 0, 評論 - 58, 引用 - 0
            數據加載中……

            初識C#

            本以為可以有點時間來好好學習一下MFC,可是昨天和supervisor見了個面,發現必須要馬上學習C#才行。之前聽說C# = C++ + Java,花了兩天時間看了c#的基本語法,發現果然如此,基本語法和c++沒什么區別,代碼結構上又是繼承了Java(比如沒有頭文件,main()也放在了class里面等)。我看的是《Programming C# 3 0》 5th Edition,這書寫得不錯,不知道第五版有沒有中文版(反正我搜索只有第四版的中文版),作者不愧是微軟的人,開篇就把c#一頓吹,吹得讓我這種剛學c#的人信心爆棚,覺得c#似乎無所不能,可以勝任各種平臺,包辦本地和web應用。哦,他推崇應該是.NET,不過既然c#是.NET的御用語言,當然也該推崇了。話說回來,Jesse的語言能力和寫作水平還是毋庸置疑的,讀起來還是十分輕松的(不像某Bruce),這可能也和本書定位有關(Beginning to Intermediate)。

             

            寫下幾點個人覺得要記住的地方(或者說是比起c++有變化的地方):

             

            1.用于if等語句的條件判斷的表達式值只能為bool,不能像C++那樣輸入個int值進行判斷了。這樣也帶來一個好處,就是像if(test = 20)這樣的語句就無法通過編譯了。相信把“==”寫成“=”,每個人都基本干過吧,當然,你可以寫成if(20 == test)來避免錯誤。不過,看來微軟是不喜歡這樣的,畢竟總是倒著寫不符合直覺啊。

            2.switch語句中的每個非空case必須有顯式的跳轉,否則程序不會自動進入到下一個case判斷,而是編譯錯誤。

            3.當為class創建對象時,所有數據成員首先會被初始化為‘0’(或者null等),然后才是調用構造函數進行初始化。也就是說,在創建一個對象時,實際上數據成員被賦了兩次值。我不知道為什么要設計成這樣,也不知道作者提出這一點目的何在,因為調用構造函數之前的事情似乎完全是不受我們控制的。

            4.構造函數要聲明為public

            5.this是一個引用而不是指針,不過就我目前的水平來看,實際上使用仍然是一回事。

            6.靜態成員只能通過類名來訪問,若試圖通過實例訪問就會編譯錯誤。

            7.傳遞參數為引用時使用ref。比如function(int& inNumber),應該寫成function(ref int inNumber)。并且在調用該函數是必須顯式地指明:function(ref aNumber)。另一個修飾符out也能實現同樣的功能,目前知道的區別就是:在用out傳入的參數不要求有初始化值,不過必須在函數中給它賦值,否則就報錯,而ref則不是必需要求被賦值。(網上搜了下,有這么一句:“Out更適合用在需要Return多個返回值的地方,而Ref則用在需要被調用的方法修改調用者的引用的時候”,先放在這)

            8.不需要析構函數,因為有GC。不過,當你想自己處理非托管資源(unmanaged resources)時,還是需要的。不過你可以使用某些已經包裝好的類(wrapper classes)來避免這種情況(大概是這么個意思吧,作者提到了FileStream,讓我不禁想到Java里的FileStream)。

            9.修飾符:readonly和const有些類似,通過博客園和csdn上的一些文章,大概記住的區別有:readonly不要求是static的;只能用于類的數據成員;只能用構造函數來初始化(在聲明時的賦值沒有意義)。放兩篇文章以便以后學習:Kenney的《比較C#中的readonly與const》和Allen Lee的《readonly vs. const [C#]》。readonly可以用來聲明那些在運行時才能確定的常量。

             

            以上,基本就是看《Programming C# 3 0》一部前4章的一些記錄。

            posted on 2008-06-10 22:57 54sun 閱讀(456) 評論(2)  編輯 收藏 引用 所屬分類: C#

            評論

            # re: 初識C#  回復  更多評論   

            第3點,.NET是托管的,內存管理器是在操作系統上再加了一層。為了保證每個成員的值都是正確的,至少引用被賦值成null還是很合理的。至于為什么要兩次,估計還是安全起見。具體不詳。
            2008-06-11 16:38 | 陳梓瀚(vczh)

            # re: 初識C#  回復  更多評論   

            @陳梓瀚(vczh)

            我是覺得,編譯器只要檢查構造函數,確保每個成員都有被賦值(沒賦值的自動補上),就不需要在運行時進行二次賦值了。
            或者說,相比于編譯期間檢查成員,在運行時使用兩次賦值的開銷反而要小一些?
            2008-06-11 20:37 | 54sun
            久久天天躁狠狠躁夜夜2020老熟妇| 日本精品久久久中文字幕| 久久久久久国产a免费观看不卡| 久久久久国产精品嫩草影院| 久久精品国产99久久久香蕉| 日韩va亚洲va欧美va久久| 久久久久亚洲av无码专区导航| 国产精品久久影院| 亚洲精品国精品久久99热| 久久人人爽人人爽人人片av高请| 久久99精品国产麻豆宅宅| 国内精品久久久久久久久电影网| 久久国产精品成人影院| 久久精品极品盛宴观看| 天天久久狠狠色综合| 无码国产69精品久久久久网站| 99久久免费国产精品| 精品久久久久久无码专区不卡| 国产午夜精品久久久久九九| 伊人久久大香线蕉AV色婷婷色| 久久精品国产只有精品66| 精品国产91久久久久久久| 久久亚洲AV无码精品色午夜| 国产午夜电影久久| 久久精品亚洲精品国产色婷| 伊人久久大香线蕉综合5g| 国产一区二区三精品久久久无广告| 久久综合精品国产二区无码| 亚洲人成无码久久电影网站| 日本道色综合久久影院| 69国产成人综合久久精品| 国产精品久久新婚兰兰| 久久中文字幕精品| 久久亚洲欧洲国产综合| 精品久久久久久久久久久久久久久| 久久伊人精品青青草原高清| 久久精品国产亚洲AV麻豆网站| 人妻精品久久久久中文字幕69 | 欧美va久久久噜噜噜久久| 要久久爱在线免费观看| 久久无码人妻精品一区二区三区|