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());
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM