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

            評論

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

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

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

            @陳梓瀚(vczh)

            我是覺得,編譯器只要檢查構造函數,確保每個成員都有被賦值(沒賦值的自動補上),就不需要在運行時進行二次賦值了。
            或者說,相比于編譯期間檢查成員,在運行時使用兩次賦值的開銷反而要小一些?
            2008-06-11 20:37 | 54sun
            久久人妻少妇嫩草AV无码专区| 久久久久高潮毛片免费全部播放| 久久99亚洲网美利坚合众国| 久久精品a亚洲国产v高清不卡| 久久精品国产半推半就| 久久中文字幕无码专区| 亚洲狠狠婷婷综合久久久久 | 99久久99这里只有免费的精品| 久久国产精品一区二区| 久久久噜噜噜久久中文字幕色伊伊| 久久99国产综合精品| 色综合久久夜色精品国产| 狠狠88综合久久久久综合网| 久久毛片免费看一区二区三区| 奇米影视7777久久精品| 久久久久亚洲av毛片大| 日韩精品国产自在久久现线拍| 97视频久久久| 久久影视综合亚洲| 久久综合狠狠综合久久激情 | 久久精品aⅴ无码中文字字幕不卡| 国产国产成人久久精品| 亚洲精品乱码久久久久久| 色8激情欧美成人久久综合电| 四虎国产精品免费久久久| 日韩av无码久久精品免费| 久久久久青草线蕉综合超碰| 久久男人中文字幕资源站| 久久免费精品一区二区| 97精品久久天干天天天按摩 | 99久久精品国产综合一区| 无码人妻久久一区二区三区免费| 一本一道久久a久久精品综合 | 77777亚洲午夜久久多人| 亚洲午夜无码AV毛片久久| 久久久久久久久久免免费精品| 亚洲一区中文字幕久久| 亚洲国产成人久久综合一| 四虎国产精品免费久久久| 久久精品成人影院| 青青草原综合久久大伊人导航|