C# 圖解教程 第四章 類的基本概念
阿新 • • 發佈:2018-12-16
類的基本概念
類的概述
類是一種活動的資料結構
在面向物件分析和設計產生前,程式設計師僅把程式當做指令的序列。那時的焦點在指令的組合和優化上。
隨著面向物件的出現,焦點轉移到組織程式的資料和功能上。
程式的資料和功能被組織為邏輯上相關的資料項和函式的封裝集合,並被稱為類。
類是一個能儲存資料並執行程式碼的資料結構。包含資料成員和函式成員。
- 資料成員:儲存與類或類的例項相關的資料。資料成員通常模擬現實世界事物的特性
- 函式成員:執行程式碼。通常模擬現實世界事物的功能和操作
類是邏輯相關的資料和函式的封裝,通常代表真實世界中或概念上的事物。
宣告類
類的宣告定義新類的特徵和成員。它並不建立類的例項,但建立了用於建立例項的模板。
- 類的名稱
- 類的成員
- 類的特徵
關鍵字 類名 ↓ ↓ 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()); } }
from: http://www.cnblogs.com/moonache/p/6038631.html