C#圖解教程學習筆記——類相關的概念

1、一些基本概念
1. 字段:隸屬於類的變量,即類的成員變量。
2. 方法:隸屬於類的函數,即類的成員函數。
3. 實例成員:類的每一個實例擁有本身的各個類成員的副本,這些成員稱爲實例成員。 改變一個實例字段的值不會影響任何其餘實例成員中的值。
4. 靜態成員
靜態成員是與類相關的成員,被加載到靜態存儲區,且只被建立一次,類的全部實例共享靜態成員。
靜態字段示例:函數

靜態函數成員:無需類實例就能夠調用靜態方法。靜態函數成員不能訪問實例成員,只能訪問靜態成員。
從類的外部訪問靜態成員:類名稱.靜態成員名稱
注:
  靜態成員即便沒有類的實例也存在。若是靜態字段有初始化語句,那麼會在使用該類的任何靜態成員以前初始化該字段,但不必在程序執行的開始就初始化。
5. 成員常量:聲明在類聲明中的常量。
常量不能聲明爲靜態成員。
成員常量表現得像靜態值,對類的每一個實例都是可見的,即便沒有類的實例也能夠訪問。可是常量沒有本身的存儲位置,而是在編譯時被編譯器替換,而靜態量是有本身的存儲位置的。
6. readonly修飾符:字段可用readonly修飾。其做用相似於將字段聲明爲const,一旦值被設定就不能改變。
readonly字段與const字段有何區別?
(1)const字段只能在字段聲明語句中初始化,而readonly字段除了能夠在字段聲明語句中初始化,還能夠在類的任何構造函數中初始化,若是是static字段,初始化必須在靜態構造函數中完成。
(2)const字段的值必須在編譯時決定,而readonly字段值能夠在運行時決定。
(3)const字段的行爲老是靜態的,在內存中沒有存儲位置。而readonly字段能夠是靜態字段,也能夠是實例字段,並且在內存中是有存儲位置的。spa

 

2、屬性
屬性表明類的實例或類中的一個數據項成員。使用屬性看起來像寫入或讀取一個字段,它們語法相同。
1. 關於屬性的一些特性
(1)屬性是有類型的、命名的類成員,能夠被賦值和讀取。
(2)屬性是執行代碼,不爲數據存儲分配內存。
(3)可被聲明爲static。
(4)屬性擁有兩個稱爲訪問器的方法:
<1>set訪問器:爲屬性賦值。擁有一個單獨的、隱式的值參,名稱爲value,與屬性的類型相同,返回類型爲void。
<2>get訪問器:從屬性取值。沒有參數,返回類型與屬性類型相同。
訪問器set、get順序任意,除這兩個訪問器外在屬性上不容許有其餘方法。
訪問器set、get能夠只定義其中一個,但至少要定義一個。
示例:blog

2. 屬性的使用
屬性根據當前執行的操做是寫入仍是讀取,隱式調用訪問器。(訪問器不能被顯式調用)
示例:索引

3. 屬性的做用
(1)將字段聲明爲private以封裝字段,並聲明一個public屬性來控制從類的外部對該字段的訪問。這樣的字段常被稱爲後備字段、後備存儲。
(2)能夠聲明屬性爲只讀或只寫,從而控制後備字段爲只讀或只寫。只有get訪問器的屬性爲只讀屬性,只有set訪問器的屬性爲只寫屬性。
(3)屬性訪問器能夠對字段執行其餘計算。
4. 自動實現屬性
由於屬性常常關聯到後備字段,C#提供了自動實現屬性(automatically implemented property),容許只聲明屬性而不聲明後備字段。編譯器爲你建立隱藏的後備字段,而且字段掛接到get和set訪問器上。
自動實現屬性的要點以下:
(1)不聲明後備字段,編譯器根據屬性類型分配存儲。
(2)不能提供訪問器的方法體,它們必須被簡單地聲明爲分號。get至關於簡單的內存讀,set至關於簡單的寫。
(3)除非經過訪問器,不然不能訪問後備字段。由於不能用其餘方法訪問,因此實現只讀和只寫屬性沒有意義,所以使用自動屬性必須同時提供讀寫訪問器。內存

 

3、構造函數
1. 構造函數的名稱與類相同。
2. 構造函數不能有返回值。
3. 若是在類的聲明中沒有顯式的提供實例構造函數,那麼編譯器會提供一個隱式的默認構造函數,默認構造函數沒有參數,且方法體爲空。
4. 只要聲明瞭構造函數,編譯器就再也不提供默認構造函數。
5. 構造函數能夠被重載。
6. 實例構造函數初始化類的每一個新實例,靜態構造函數初始化類級別的項。一般,靜態構造函數初始化類的靜態字段。
7. 靜態構造函數不能在程序中顯式調用,系統會自動調用它們,調用時機:類的任何實例被建立前;類的任何靜態成員被引用前。get

 

4、索引器
索引器是一組get和set訪問器,與屬性相似。能夠認爲,索引器是爲類的多個數據成員提供了get、set屬性。
聲明示例:編譯器

調用示例:
var emp = new Employee();
emp[0] = "Jet";
emp[1] = "Wu";
var lastname = emp[0];
1. 和屬性同樣,索引器不用分配內存來存儲。
2. 和屬性同樣,索引器能夠只有一個訪問器,也能夠兩個都有。
3. 索引器老是實例成員,所以不能聲明爲static。
4. 和屬性同樣,實現get、set訪問器的代碼沒必要必定關聯到某字段或屬性。這段代碼能夠什麼都不作,只要get訪問器返回某個指定類型值便可
5. 索引器聲明中,參數列表至少要聲明一個參數。
6. 和屬性同樣,不能顯示調用get、set訪問器。取而代之,當索引器用在表達式中取值時,將自動調用get訪問器。索引器被賦值時,自動調用set訪問器。
7. 索引器重載:一個類能夠有任意多個參數列表不一樣的索引器。
8. 索引器的訪問修改符:
(1)僅當成員(屬性或索引器)既有get訪問器也有set訪問器時,其訪問器纔能有訪問修飾符。
(2)雖然兩個訪問器都必須出現,但它們中只能有一個有訪問修飾符。
(3)訪問器的訪問修飾符必須比成員的訪問級別有更嚴格的限制性,即訪問器的訪問級別必須比成員的訪問級別低。編譯

 

5、分部類和分部方法
1. 分部類
類的聲明能夠分割成幾個分部類的聲明。
每一個分部類的聲明都含有一些類成員的聲明。
類的分部類聲明能夠在同一文件中也能夠在不一樣文件中
每一個局部聲明必須標爲partial class,而不是class。
分部類聲明看起來和普通類聲明相同。
示例:ast

2. 分部方法
分部方法是聲明在分部類中不一樣部分的方法。
分部方法分爲兩個部分:定義分部方法聲明和實現分部方法聲明。
1. 定義聲明和實現聲明的簽名和返回類型必須匹配。簽名和返回類型有以下特徵:
<1>返回類型必須是void。
<2>簽名不能包括訪問修飾符,這使分部方法是隱式私有的。
<3>參數列表不能包含out參數。
<4>在定義聲明和實現聲明中都必須包含上下文關鍵字partial,直接放在關鍵字void前。
2. 能夠有定義部分而沒有實現部分。這種狀況下,編譯器把方法的聲明以及方法內部任何對方法的調用都移除。不能只有實現部分而沒有定義部分。
示例:class

相關文章
相關標籤/搜索