• <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
            无码人妻久久一区二区三区蜜桃| 18岁日韩内射颜射午夜久久成人| 久久丝袜精品中文字幕| 亚洲精品无码成人片久久| 久久久久久综合一区中文字幕| 久久精品国产一区二区三区不卡| 久久久噜噜噜www成人网| 久久亚洲AV无码西西人体| 久久久中文字幕| 99久久国产综合精品网成人影院| 18岁日韩内射颜射午夜久久成人| 66精品综合久久久久久久| 狠狠精品干练久久久无码中文字幕| 国产精品无码久久综合网| 天天综合久久久网| 久久久国产一区二区三区| 久久久久亚洲?V成人无码| 久久强奷乱码老熟女网站| 国产综合免费精品久久久| 中文字幕久久亚洲一区| 亚洲av伊人久久综合密臀性色| 久久久久人妻一区精品色| 精品一区二区久久| 亚洲色欲久久久久综合网| 久久天堂电影网| 国产精品99久久免费观看| 中文字幕无码久久精品青草| 精品熟女少妇aⅴ免费久久| 久久99国产精品99久久| 久久国产精品无| 欧美性大战久久久久久| 久久人与动人物a级毛片| 国产精品久久久久AV福利动漫 | 99精品久久精品一区二区| 久久国产精品无| 久久精品免费一区二区三区| 亚洲天堂久久精品| 久久综合亚洲色HEZYO国产| 亚洲国产成人精品久久久国产成人一区二区三区综 | 亚洲va久久久噜噜噜久久| 久久丫精品国产亚洲av不卡|