靈魂-放水

          為學日益,為道日損。

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            296 Posts :: 10 Stories :: 274 Comments :: 0 Trackbacks

          1、? 命名空間是 C# 代碼的基本組織形式,類、結構等各種類型定義都包含在命名空間中,而一個命名空間也可以嵌套在另一個命名空間之中,這就形成了一個邏輯上的層次體系結構。一個程序集中可以包含多個命名空間,但每個命名空間只能屬于一個程序集。

          2、? C# 中,嚴格地說,字符類型( char )也是一種整數類型, C# 編譯器負責在規定范圍的整數和字符之間進行轉換。由于采用了 Unicode 字符集, C# 中單個漢字也可以作為字符來使用,如 char a =’ ’;

          3、? 結構是值類型,而類是引用類型;對于值類型,每個變量直接包含自身的所有數據,每創建一個變量,就在內存中開辟一塊區域;而對于引用類型,每個變量只存儲對目標數據的引用,每創建一個變量,就增加一個指向目標數據的指針。

          4、? 如果一個類同時繼承了接口和其他的類,定義時需要將基類寫在前面,接口寫在后面。接口定義中對方法的聲明,既不包括訪問限制修飾符,也不包括方法的執行代碼。

          5、? 子類型到父類型進行顯示轉換,父類型到子類型進行隱式轉換。裝箱轉換:實現了從值類型到引用類型的隱式轉換,其中包括從任何值類型到 System.Object 類型的轉換,以及從某個值類型到它所實現的接口類型的轉換;拆箱轉換:實現了從引用類型到值類型的顯示轉換,其中包括從 System.Object 類型到任何值類型的轉換,以及從某個接口類型到繼承借口的某個值類型的轉換。編譯器對顯示轉換并不進行檢查,一旦轉換失敗,程序就會中止并拋出一個 System.InvalidCastException 異常。

          6、? 要使一個方法能夠接受不同數量的參數,就要用到數組型參數。數組型參數的使用有嚴格的規定:方法中只允許定義一個數組型參數,而且該參數必須位于參數列表中的最后;數組型參數所定義的數組必須是一維數組;數組型參數不能同時既為引用型參數又為輸出型參數。傳遞給數組型參數的實參可以是一個數組變量,也可以是多個數組元素變量。前者采用引用傳遞(方法執行代碼對形參的修改同時也改變了實參),而后者采用值傳遞的方式(方法執行代碼對形參的修改不會影響到實參)。

          7、? C# 中的方法可以接受的參數類型共有 4 種:普通參數;引用型參數,以關鍵字 ref 定義,采用引用傳遞;輸出型參數,以關鍵字 out 定義,采用引用傳遞,其實參可以不進行初始化;數據型參數,以關鍵字 params 定義,根據實參形式選擇引用傳遞或值傳遞,包含數量可變的參數。

          8、? 對于在命名空間下直接定義的類型(如類、結構、接口、枚舉、代表等),不允許使用 private 修飾符。如果成員未加任何訪問限制修飾符,則默認均為 private Protected 修飾符只能用于類的成員,而對結構的成員以及在命名空間下直接定義的類型無效。 Public internal 可以作為程序集層次上的訪問限制修飾符, public 的訪問限制級別低于 internal ;而 public protected private 三者可以作為類型層次上的訪問限制修飾符,且限制程度由低到高。

          9、? 在類的繼承層次中,要求派生類的訪問限制級別不能低于基類的訪問限制級別。也就是說,如果某個基類的訪問限制修飾符為 internal ,那么它的所有派生類都不能使用 public 來作為修飾符。 C# 對于成員訪問限制的一個要求是:對方法參數類型的訪問限制級別不能高于對方法的訪問限制級別。比如: protected void SendMail(Address TargetAddress) ,而 Address 的訪問級別為 private ,使用了 Address 作為參數,那么編譯時就會發生錯誤。

          10、????????????? 實例成員,屬于類型的實例所有;靜態成員,屬于類型本身所有。和實例成員不同,使用靜態成員時,圓點連接符的前面不再是某個具體的對象變量,而是類的名稱。對于實例字段,每創建一個類的實例,都在內存中開辟了一塊區域用于存儲該字段;而類的靜態字段屬于類所有,為這個類的所有實例所共享,無論為這個類創建了多少個對象,一個靜態字段在內存中只占有一塊區域。 Static Variable ,從創建類或結構的第一個實例開始,靜態變量開始存在,以后增加的實例都將共享著一變量,直至類或結構的所有實例都從內存中清楚,相應的靜態變量才被清楚。

          11、????????????? 類的靜態構造函數只被調用了一次,而非靜態的構造函數則在創建每個對象時都被調用。在創建類的第一個實例時,首先是將字段定義時的初始值賦予該字段(如未指定初始值則賦予其類型的默認值),然后調用類的靜態構造函數,最后調用類的非靜態構造函數。

          12、????????????? 對于所有的復合賦值操作符,只要其左部操作符是可重載的二元操作符,并且操作符重載的返回類型可以隱式地轉換為當前類,那么相應的賦值操作符也被隱式重載;被重載的操作符也是一種特殊的方法,且必須被聲明為公有的和靜態的。重載一元操作符時需提供一個參數,且參數類型應為當前類型,或者是可以隱式轉換為當前類型;重載二元操作符時需提供兩個參數,且至少有一個參數類型應為當前類型,或者是可以隱式轉換為當前類型。

          13、????????????? C# 中,大多數情況下,派生類不會一成不變地繼承基類中的所有成員,例如,。可能希望在某些字段中存儲不同的信息、在某些方法中執行不同的操作等。這時就需要通過 new 關鍵字來隱藏基類中的成員。

          派生類的構造函數對基類構造函數的調用是自動的,因此基類構造函數 base ()不允許在代碼中顯示地使用,而只允許標注在派生類構造函數的聲明體之后。 Public Father():base( )

          {

          ? Console.WriteLine(“ 調用 Father 的構造函數 ”);

          }

          錯誤:

          Public Father( )

          {

          Base();

          Console.WriteLine(“ 調用 Father 的構造函數 ”);

          }

          14、????????????? 密封類是指不允許有派生類的類,而密封方法則是指不允許被重載的方法。密封方法所在的類不一定是密封類,而如果該類存在派生類,那么在派生類中就必須原封不動地繼承這個密封方法。接口的任何派生類型(包括類和接口)都必須繼承該接口定義的所有方法,而抽象類的任何派生類都必須繼承該抽象類定義的所有抽象方法;

          ?

          posted on 2006-09-02 10:51 放水老倌 閱讀(442) 評論(3)  編輯  收藏 所屬分類: .NET

          Feedback

          # re: 《C#2.0程序設計》讀書筆記 2006-09-03 17:15 matthew2006
          RFID小狂人拉!哈  回復  更多評論
            

          # re: 《C#2.0程序設計》讀書筆記 2006-09-06 13:33 na57
          提點建議:
          1, 看書不要太仔細了,有些東西了解就可以了,不用特別地去看,像char,struct等。
          2, 子類型到父類型的轉換問題。這種類型的問題可以深入了解,對理解面向對象的本質有幫助。推薦看《.NET 本質論》。同樣的,關于接口,靜態成員等問題也屬于面向對象的本質問題,其實,與C#本身關系不大。

          努力,加油!
            回復  更多評論
            

          # re: 《C#2.0程序設計》讀書筆記 2006-09-06 19:35 放水老倌
          看書都不太仔細了,只是對于這種入門而又基礎的東西,個人覺得要仔細一些。畢竟,根基打牢了,才好擴展嘛。給對?xixi對于,入門以后,就大多是搞原理了。多謝小文指點!!!!
            回復  更多評論
            

          主站蜘蛛池模板: 旌德县| 博野县| 绥芬河市| 肇庆市| 蓬安县| 万年县| 大城县| 黄山市| 仁化县| 庆阳市| 宝坻区| 梅河口市| 色达县| 墨玉县| 汽车| 定襄县| 台东县| 苍南县| 邢台市| 民勤县| 德格县| 海宁市| 贵州省| 松阳县| 岑巩县| 孝义市| 正阳县| 托里县| 文登市| 曲水县| 寿阳县| 新泰市| 额尔古纳市| 股票| 桦南县| 贵定县| 都匀市| 郁南县| 简阳市| 夹江县| 边坝县|