1. 程式人生 > >C# 圖解教程 第四章 類的基本概念

C# 圖解教程 第四章 類的基本概念

類的基本概念

類的概述


類是一種活動的資料結構 
在面向物件分析和設計產生前,程式設計師僅把程式當做指令的序列。那時的焦點在指令的組合和優化上。 
隨著面向物件的出現,焦點轉移到組織程式的資料和功能上。 
程式的資料和功能被組織為邏輯上相關的資料項和函式的封裝集合,並被稱為類。

類是一個能儲存資料並執行程式碼的資料結構。包含資料成員和函式成員。

  • 資料成員:儲存與類或類的例項相關的資料。資料成員通常模擬現實世界事物的特性
  • 函式成員:執行程式碼。通常模擬現實世界事物的功能和操作

類是邏輯相關的資料和函式的封裝,通常代表真實世界中或概念上的事物。


宣告類


類的宣告定義新類的特徵和成員。它並不建立類的例項,但建立了用於建立例項的模板。

  • 類的名稱
  • 類的成員
  • 類的特徵
關鍵字  類名
  ↓      ↓
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