CLR via C#:成員基礎

類型中的各種成員:在一個類型中可以定義0個或者多個以下種類的成員:
1.常量:只能被類型訪問且不可以對常量值進行修改。
2.字段:靜態字段只能被類型訪問;實例字段只能被實例訪問;不可以對只讀的字段值進行修改;建議將字段設置成私有以防止被外部代碼破壞狀態。
3.類型構造器:格式爲"static 類型名() {}",用來對類型的靜態字段進行初始化。
4.實例構造器:格式爲"public 類型名(參數列表) {}",用來對實例字段進行初始化。
5.方法:靜態方法只能被類型訪問;實例方法只能被實例訪問。
6.操作符重載:定義了當操作符應用於實例時,應該如何操作該實例的方法。
7.轉換操作符:定義瞭如何隱式或者顯示的將實例從一種類型轉換成另一種類型的方法。
8.屬性:靜態屬性只能被類型訪問,如"public static 屬性名{ get{…}; set{…}; }";實例屬性只能被實例訪問,如:“public 屬性名{ get{…}; set{…}; }”。
9.事件:通常是由註冊事件,移除事件以及響應事件方法集組成。靜態事件是由類型向一個或者多個類型或者實例發送通知;實例事件是由實例向一個或者多個類型或者實例發送通知。
10.類型:用來將大的,複雜的類型拆分成更小的構建單元。

類型的可見性:如下所示:
1.public表示類型在所有程序集的所有代碼中可見。
2.internal表示類型在當前程序集的所有代碼中可見。
3.編譯當前程序集時,可以使用CompilerServices命名空間中的InternalsVisibleTo特性來設置包含的友元程序集(名稱和公鑰);編譯友元程序集時,必須使用/out:來指明友元程序集的名稱,如果友元程序集中包含模塊的話,也必須使用/moduleassemblyname:開關來告訴編譯器該模塊屬於的友元程序集名稱;經過這些設置後就可以讓友元程序集中所有的代碼訪問包含該友元程序集的程序集中的internal類型;

成員的可訪問性:如下所示:
1.可訪問性按照限制從大到小排列,如下表所示:

CLR術語 C#術語 描述
Private private 成員只能由定義類型或任何嵌套類型中的方法訪問
Family protected 成員只能由定義類型或任何嵌套類型或任何派生類型中的方法訪問
Family And Assembly 不支持 成員只能由定義類型或任何嵌套類型或定義程序集中的派生類型中的方法訪問
Assembly internal 成員只能由定義程序集中的方法訪問
Family or Assembly protected internal 成員可以由任何嵌套類型或任何派生類型或定義程序集中任何方法訪問
Public public 成員可以由任何程序集的任何方法訪問

2.接口中不允許顯示指定成員的可訪問性,由編譯器自動指定爲public;其他類的成員如果不指定訪問性的話,默認會由編譯器自動指定爲private。
3.CLR允許放寬但不允許收緊派生類型中基類型成員的可訪問性;而C#要求派生類型中基類型成員的可訪問性不能更改。

靜態類型:用static關鍵字修飾的類型。具有以下特性:
1.靜態類型只能作用於引用類型,不能作用於值類型(CLR要求值類型必須可以被實例化)。
2.靜態類型只能隱式或者顯示繼承自System.Object。
3.靜態類型不能實現任何接口。
4.靜態類型裏面的成員只能是靜態或者常量成員。
5.靜態類型不能作爲變量(局部變量,參數變量,類成員變量等)使用。

分部類型:用partial關鍵字修飾的類型。具有以下特性:
1.分部類型可以作用於class,struct以及interface。
2.分部類型有利於代碼拆分。由於可以在不同源文件進行定義,從而方便版本管理。
3.分部類型是C#編譯器提供支持的,CLR對該功能一無所知。

設計類時遵循的原則:如下所示:
1.除非明確要將設計類作爲基類且允許派生類對它進行特殊處理,否則我們都將設計類聲明爲sealed密封類。
2.默認將設計類設置成internal可見性,除非需要所有程序集可見時才設置成public可見性。
3.設計類中所有的字段設置成private訪問性。
4.設計類中的方法儘量設計成非虛方法,這樣調用速度會比較快。同時除了供外部訪問的屬性,方法和事件設置成public訪問性,其他情況下都設置成private(次要選擇protected internal)訪問性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章