類的基本概念
類的概述
類是一種活動的數據結構
在面向對象分析和設計產生前,程序員僅把程序當做指令的序列。那時的焦點在指令的組合和優化上。
隨着面向對象的出現,焦點轉移到組織程序的數據和功能上。
程序的數據和功能被組織為邏輯上相關的數據項和函數的封裝集合,並被稱為類。
類是一個能存儲數據並執行代碼的數據結構。包含數據成員和函數成員。
- 數據成員:存儲與類或類的實例相關的數據。數據成員通常模擬現實世界事物的特性
- 函數成員:執行代碼。通常模擬現實世界事物的功能和操作
類是邏輯相關的數據和函數的封裝,通常代表真實世界中或概念上的事物。


聲明類
類的聲明定義新類的特征和成員。它並不創建類的實例,但創建了用於創建實例的模板。
- 類的名稱
- 類的成員
- 類的特征
關鍵字 類名 ↓ ↓ class MyExcellentClass { 成員聲明 }
類成員
字段和方法是最重要的類成員類型。
字段是數據成員,方法是函數成員。
字段
字段隸屬於類的變量
- 它可以是任何類型,無論預定義類型還是用戶定義類型
- 和所有變量一樣,字段用於保存數據
- 可以被寫入
- 可以被讀取
class MyClass { 類型 字段名稱 ↓ ↓ int MyField }
方法
方法是具有名稱的可執行代碼塊。
方法聲明包括以下組成部分
- 返回類型
- 名稱
- 參數列表
- 方法體
class SimpleClass { 返回類型 參數列表 ↓ ↓ void PrintNums() { Console.WriteLine("1"); } }
創建變量和類的實例
類的聲明只用於創建類的實例的模板。一旦類被聲明,就可以創建類的實例。
- 類是引用類型,這意味着它們要為數據引用和實際數據都申請內存
- 數據的引用保存在一個類類型的變量中。所以,要創建類的實例,需要從聲明一個類類型的變量開始。如果變量沒有被初始化,它的值是未定義的


為數據分配內存
聲明類類型的變量所分配的內存是用來保存引用的,而不是類對象實際數據。
要為實際數據分配內存,需要使用new運算符。
- new運算符為任意指定類型的實例分配並初始化內存。它依據類型的不同從棧或堆里分配
- 使用new運算符組成一個對象創建表達式
- 關鍵字 new
- 要分配內存的實例的類型名稱
- 成對的圓括號,可能包括參數或無參數
- 如果內存分配給一個引用類型,則對象創建表達式返回一個引用,指向在堆中被分配並初始化的對象實例
Dealer theDealer; //聲明引用變量 theDealer = new Dealer();//為類對象分配內存並賦給變量


實例成員
類聲明相當於模板,通過這個模板想創建多少個類的實例都可以。
- 實例成員:類的每個實例都是不同的實體,它們有自己的一組數據成員,不同於同一類的其他實例。因為這些數據成員都和類的實例相關,所以被稱為實例成員
- 靜態成員:靜態成員是與類相關的成員,靜態成員被加載到靜態存儲區,且只被創建一次,類的所有實例共享靜態成員
訪問修飾符
類的內部,成員間可以任意訪問。
訪問修飾符,指明外部程序如何訪問類中的成員。
字段
訪問修飾符 類型 標識符;
方法
訪問修飾符 返回類型 方法名()
{
...
}
五種訪問修飾符
- 私有的(private)
- 公有的(public)
- 受保護的(protected)
- 內部的(internal)
- 受保護內部的(protected internal)
私有訪問和公用訪問
- 私有訪問是默認的訪問級別
- 實例的公有成員可以被程序中的其他對象訪問

class C1 { int F1; //隱式私有字段 private int F2; //顯示私有字段 public int F3; //公有字段 void DoCalc() //隱式私有方法 { ... } public int GetVal()//公用方法 { ... } }


從類的內部訪問成員
類的成員僅用其他類成員的名稱就可以訪問它們
class DaysTemp { //字段 private int High = 75; private int Low = 45; //方法 private int GetHigh() { return High; } private int GetLow() { return Low; } public float Average() { return (GetHigh()+GetLow())/2;//訪問私有方法 }


從類的外部訪問成員
要從類的外部訪問實例成員,必須包括變量名稱和成員名稱,中間用.(dot-syntax notation 點運算符)分隔。
DaysTemp myDt = new DaysTemp(); //創建類的對象 float fValue = myDt.Average(); //從外部訪問
綜合應用
下面代碼創建兩個實例並把它們的引用保存在名稱為t1和t2的變量中。
這段代碼示范了目前位置討論的使用類的3種行為
- 聲明一個類
- 創建類的實例
- 訪問類的成員(寫入字段、讀取字段)
class DaysTemp //聲明類 { public int High,Low; //聲明實例字段 public int Average() //聲明實例方法 { return(High+Low)/2; } } class Program { static void Main() { //創建兩個實例 DaysTemp t1 = new DaysTemp(); DaysTemp t2 = new DaysTemp(); //給字段賦值 t1.High = 76; t1.Low = 57; t2.High = 75; t2.Low = 53; //讀取字段值 //調用實例方法 Console.WriteLine("t1:{0},{1},{2}",t1.High,t1.Low,t1.Average()); Console.WriteLine("t2:{0},{1},{2}",t2.High,t2.Low,t2.Average()); } }



