【Professional C# 讀書筆記】(一)—–C#語言基礎

來源:互聯網
上載者:User

說起c#就不能不提.net,可是你知道,二者並沒有根本上的聯絡(有些過,但可以明確的是c#不是.NET的一部分)-----雖然c#是專門為.NET而設計的……然而,當二者配合使用的時候,就會有這樣的效果:有一些特性是語言特性,c#語言支援的,有一些特性是平台特性,.NET支援的,所以,想使用c#高效的開發,部署,理解framework是必要的。

    第一章是.NET體繫結構的總體概述,很多地方還不能理解的透徹,估計沒什麼大礙,在以後慢慢琢磨,可以預見的是,幾乎每向下進行一布,就要回頭看看第一章那個的相關內容,予以總過……

    因為有過一些cpp,java 的編程經曆,看到cs的代碼覺得陌生,很多東西是一樣的……但是有一些方面值得注意

    1,相異實值型別和參考型別

        二者的儲存方式不同,前者是儲存在棧中,後者是儲存在託管堆中,而且是一個原值的引用。對於預定義的資料類型來講:除了string,object之外都是實值型別,而他們是參考型別。

    但是有一點值得注意:作為ref的string:

view plaincopy to clipboardprint?string s1 = "Hello World";   string s2= s1 ;    s1 = "Something else";      string s1 = "Hello World";
    string s2= s1 ;
    s1 = "Something else";

    此時的輸出結果:s1 = something else  ; s2 = Hello World

    因為在修改一個字串的時候,會建立一個全新的string,這其中的實現機制,我覺得應該是string的封裝類的符號重載“=”

    哦對了,c#對於資料的初始化非常嚴格……

    object類,最終父類,其強大的作用,知道一點java的都懂的……

    2,關於注釋

        平時不太關注的,這裡因為有一個XML文檔說明,覺得這樣的一個解決方式非常的聰明,後面的思想很值得借鑒,codes are just codes,根據我們解析法那個是的不同,便會有不同……

    3,編程約定

        私用有成員使用camel形式,公有與保護使用Pascal形式

    4,類成員

        資料成員:欄位,常量,事件。這裡,事件是我現在還不能理解的,但是大體的意思的“客戶可以包含所謂的事件處理常式的代碼來響應該事件”-------這是不是和SQL中的trigger有一個作用,如果是那樣的就好理解了……待驗證。

        函數成員:

        方法,無需解釋

        屬性,沒有VB經驗的表示屬性是一個多餘的東西,我可以把它理解為一個對於訪問器與設定器偷工減料的書寫方式麼?我一開始以為可能這樣使用屬性的話,可以把其自動列為內嵌函式,但是我錯了,.net的內聯機制的自動的(大多數情況下?),好了,既然如此,當我更熟悉CPP/JAVA的時候,我沒有理由不放棄她……

            還有關於out的使用,這對與有目的性的實值型別做輸出變數是有意義的,我估計其實現機制是強制的轉化ref型……而後面的重載規則中:兩方法不能根據參數的ref和out 來區分 ---這也支援我的推斷

        建構函式:因為嚴格的初始化控制,在沒有自訂constructor的時候,會有一個預設的,無參數constructor,把實值型別設為0,參考型別設為null,這其中的實現機制我感覺是,最終父類object繼承造成的。一個很不錯的東西。

                關於初始化列表,cs中,確實用類似的使用,但是,只允許對其他建構函式的調用,……(那麼,封裝類呢?)

            靜態建構函式,對欄位中static進行初始化,但是我們不知道什麼時候會初始化,只是告訴你會在這個類使用之前,.net中有很多不確定性,這樣的話,如果考試就沒得出題了?……

        終結器:自動的析構

        operator:

        索引器:還不懂,&

    5,關於readonly欄位

        我覺得如果用一句說的話,應該是:可以在建構函式中給他賦值,之後的行為與const一直……

    6,擴充方法:

        是一個非常非常非常有用的東西,雖然以前沒有用過,但是,這個一定非常非常非常有用:

view plaincopy to clipboardprint?
public static class Extension  
{  
    public static void AddMethod(this Money monney, int number)  
     {  
          money.number += number;  
   }  

public static class Extension
{
    public static void AddMethod(this Money monney, int number)
     {
          money.number += number;
   }
}

書寫的時候,注意是靜態,但是調用的時候,執行個體方式調用,擴充方法不會覆蓋同名方法。

第一篇over

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/chrisplus_jiang/archive/2010/07/14/5734181.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.