• <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 閱讀(469) 評論(2)  編輯 收藏 引用 所屬分類: C#

            評論

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

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

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

            @陳梓瀚(vczh)

            我是覺得,編譯器只要檢查構造函數,確保每個成員都有被賦值(沒賦值的自動補上),就不需要在運行時進行二次賦值了。
            或者說,相比于編譯期間檢查成員,在運行時使用兩次賦值的開銷反而要小一些?
            2008-06-11 20:37 | 54sun
            免费国产99久久久香蕉| 国产一区二区三精品久久久无广告| 欧洲性大片xxxxx久久久| 亚洲欧美国产日韩综合久久| 久久综合久久美利坚合众国| 欧美熟妇另类久久久久久不卡 | 国产激情久久久久久熟女老人| 久久国产色av免费看| 亚洲国产精品久久久久网站 | 精品久久久一二三区| 91精品国产乱码久久久久久| 久久久久综合中文字幕| 狠狠色丁香婷婷综合久久来| 亚洲精品美女久久久久99小说| 久久99精品国产一区二区三区| 综合久久给合久久狠狠狠97色| 久久久国产精品福利免费| 99久久国产精品免费一区二区| 91精品国产91久久| 国产亚洲美女精品久久久久狼| 久久精品免费一区二区| 久久久国产一区二区三区| 久久久久国产一级毛片高清版| 中文字幕久久久久人妻| 偷偷做久久久久网站| 久久精品国产福利国产琪琪| 国产综合成人久久大片91| 国产亚洲欧美精品久久久| 久久人人爽人人爽人人片AV东京热| 久久精品无码一区二区app| 国产精品gz久久久| 国内精品欧美久久精品| 精品国产一区二区三区久久蜜臀| 久久久久中文字幕| 久久Av无码精品人妻系列 | 亚洲伊人久久精品影院| 狠狠色丁香久久婷婷综合蜜芽五月 | 欧美久久一区二区三区| 99久久精品国内| 91精品国产综合久久婷婷| 亚洲欧洲日产国码无码久久99|