2.0 類的概述
類是一種活動的數據結構
在面向對象的分析和設計產生之前,程序員們僅把程序當作指令的序列。那時的焦點主要放在指令的組合和優化上。隨着面向對象的出現,焦點從優化指令轉移到組織程序的數據和功能上來。程序的數據和功能被組織爲邏輯上相關的數據項和函數的封裝集合,並被稱爲類
類是一個能存儲數據並執行代碼的數據結構。它包含數據成員和函數成員
數據成員 它存儲與類或類的實例相關的數據。數據成員通常模擬該類所表示的現實世界事物的特性
函數成員 它執行代碼。通常會模擬類所表示的現實世界事物的功能和操作
一個C#類可以有任意數目的數據成員和函數成員。成員可以是9中可能的成員類型的任意組合
2.1 類的聲明
通過編寫類的聲明定義類
類的聲明定義新類的特徵和成員。它並不創建類的實例,但創建了用於創建實例的模板
類的聲明提供下列內容:
類的名稱
類的成員
類的特徵
2.2 類的成員
字段和方法是最重要的類成員類型。字段是數據成員,方法是函數成員
2.2.1 字段
字段是隸屬於類的變量
可以是任何類型,無論是預定義類型還是用戶定義類型
和所有變量一樣,字段用來保存數據,並具有如下特徵:
可以被寫入
可以被讀取
語法: 數據類型 字段名稱
① 顯式和隱式字段初始化
因爲字段是一種變量,所以字段初始化語句在語法上和變量初始化語句相同
字段初始化語句是字段聲明的一部分由一個等於號後面跟着一個求值表達式組成
初始化值必須是編譯時可確定的
如果沒有初始化語句,字段的值會被編譯器設爲默認值,默認值有字段的類型決定
值類型的默認值爲 0
bool類型默認值爲 false
引用類型默認值爲 null
② 聲明多個字段
多字段聲明和多變量聲明語法相同
2.2.2 方法
方法是具有名稱的可執行代碼塊,可以從程序的很多不同地方執行,甚至從其他程序中執行
當方法被調用(call/invoke)時,它執行自己所含的代碼,然後返回到調用它的代碼並繼續執行調用代碼。有些方法返回一個值到它們被調用的位置。方法相當於C++中的成員函數
聲明方法的最簡語法包括以下組成部分:
返回類型 它聲明瞭方法返回值的類型。如果一個方法不返回值,那麼返回類型被指定爲void
名稱 這是方法的名稱
參數列表 它至少由一對空的圓括號組成。如果有參數(參數將在下一章闡述),將被列在圓括號中間
方法體 它由一對大括號組成,大括號內包含執行代碼
2.3 創建變量和類的實例
類的聲明只是用於創建類的實例的藍圖。一旦類被聲明,就可以創建類的實例
類是引用類型,正如你從上一章學到的,這意味着它們要爲數據引用和實際數據都申請內存
數據的引用保存在一個類類型的變量中。所以,要創建類的實例,需要從聲明一個類類型的變量開始。如果變量沒有被初始化,它的值是未定義的
2.4 爲數據分配內存
聲明類類型的變量所分配的內存是用來保存引用的,而不是用來保存類對象實際數據的。要爲實際數據分配內存,需要使用new運算符
new運算符爲任意指定類型的實例分配並初始化內存。它依據類型的不同從棧或堆裏分配
使用new運算符組成一個對象創建表達式,它的組成如下:
■ 關鍵字new
■要分配內存的實例的類型名稱
■成對的圓括號,可能包括參數或沒有參數
如果內存分配給一個引用類型,則對象創建表達式返回一個引用,指向在堆中被分配並初始化的對象實例
要分配和初始化用於保存類實例數據的內存,需要做的工作就是這些
使用對象表達式初始化變量,即聲明並初始化
語法:數據類型 變量名 = new 對象名()
2.5 實例成員
類聲明相當於藍圖,通過這個藍圖想創建多少個類的實例都可以
實例成員 類的每個實例都是不同的實體,它們有自己的一組數據成員,不同於同一類的其他實例。因爲這些數據成員都和類的實例相關,所以被稱爲實例成員
靜態成員 實例成員是默認類型,但也可以聲明與類而不是實例相關的成員,稱爲靜態成員
2.6 訪問修飾符
從類的內部,任何函數成員都可以使用成員的名稱訪問類中任意的其他成員
訪問修飾符是成員聲明的可選部分,指明程序的其他部分如何訪問成員。訪問修飾符放在簡單聲明形式之前
5中成員訪問控制:
公有的(public)
私有的(private)
受保護的(protected)
內部的(internal)
受保護內部的(protected internal)
2.6.1 私有訪問和公有訪問
私有成員只能從聲明它的類的內部訪問,其他的類不能看見或訪問它們
私有訪問是默認的訪問級別,所以,如果一個成員在聲明時不帶訪問修飾符,那它就是私有成員
還可以使用private訪問修飾符顯式地將一個成員聲明爲私有。隱式地聲明私有成員和顯式地聲明沒有語義上的不同,兩種形式是等價的
實例的公有成員可以被程序中的其他對象訪問。必須使用 public 訪問修飾符指定公有訪問
在類裏面訪問成員語法:成員名
在類外面訪問成員語法:實例化類的對象 對象名.成員名
C#第二章到此結束