C#快速入門教程(3)——類的靜態成員和例項成員

曹化宇發表於2018-09-08

我們在第1課中瞭解了類與例項的關係,即,當定義了某個類型別的物件時,這個物件就是此類的一個例項;那麼,什麼是例項成員呢?簡單的說,如果定義類的成員(如欄位、屬性、方法等)時,沒有使用static關鍵字,那麼,這些成員就是例項成員,公共的(public)例項成員只能通過類的例項(物件)來訪問,如car.DoorCount、car.Drive()等;如果使用程式碼CAuto.DoorCount引用DoorCount屬性就會出現錯誤。

下面,繼續在ConsoleTest專案中進行測試,選中“解決方案管理器”中的專案,如下圖所示。

enter image description here

然後,通過選單項“專案”>>“新增類”新增一個名為CAuto的類,如下圖所示。

enter image description here

接下來,修改CAuto.cs檔案的內容如下。

using System;

namespace ConsoleTest
{
    public class CAuto
    {
        private int myDoorCount;
        public int DoorCount
        {
            get { return myDoorCount; }
            set
            {
                if (value >= 0 && value <= 5)
                    myDoorCount = value;
                else
                    myDoorCount = 4;
            }
        }
        //
        public void Drive()
        {
            Console.WriteLine("行駛中...");
        }
        //
        public void Return()
        {
            Console.WriteLine("倒車中...");
        }
        //
    }
}

在CAuto類中,定義了三個公共的例項成員,分別是DoorCount屬性、Drive()和Return()方法。下面的程式碼,我們在Program.cs檔案中測試這個類的使用。

using System;

namespace ConsoleTest
{
    class Program
    {
        static void Main(string[] args)
        {
            CAuto car = new CAuto();
            car.DoorCount = 2;
            Console.WriteLine("車門數量是{0}",car.DoorCount);
            car.Drive();
            car.Return();
        }
    }
}

使用鍵盤Ctrl+F5快捷鍵,可以看到如下圖所示的執行結果。

enter image description here

在類中定義類成員時使用static關鍵字,這個成員就是類的靜態成員,靜態成員可以通過類直接呼叫。我們新建一個名為CAutoFactory的類,修改其內容如下。

namespace ConsoleTest
{
    public class CAutoFactory
    {
        public static int Counter { get; private set; }
        //
        public static CAuto Create(int doorCount)
        {
            Counter = Counter + 1;
            CAuto auto = new CAuto();
            auto.DoorCount = doorCount;
            return auto;
        }
        //
    }
}

在CAutoFactory類中,定義了一個Counter靜態屬性,用於記錄汽車物件的建立個數;一個Create()靜態方法,用於建立汽車物件,請注意,此方法使用了一個引數,用於指定車門數量。下面的程式碼,繼續在Program.cs檔案中修改程式碼來測試CAutoFactory類。

using System;

namespace ConsoleTest
{
    class Program
    {
        static void Main(string[] args)
        {
            CAuto car1 = CAutoFactory.Create(2);
            CAuto car2 = CAutoFactory.Create(4);
            Console.WriteLine("建立汽車物件{0}個", CAutoFactory.Counter);
        }
    }
}

程式碼執行結果如下圖所示。

enter image description here

思考:為什麼在例項成員中可以呼叫靜態成員,而在靜態成員中不能呼叫例項成員。

本課的最後,瞭解一種簡化程式碼書寫的方式。下面兩段程式碼的功能是相同的,都是用於建立CAuto物件並設定DoorCount屬性,大家可以觀察、對比兩種方式的特點,並根據習慣和實際情況選擇使用。

public static CAuto Create(int doorCount)
{
    CAuto auto = new CAuto();
    auto.DoorCount = doorCount;
    return auto;
}

public static CAuto Create(int doorCount)
{
    return new CAuto()
    {
        DoorCount = doorCount
    };
}

CHY軟體小屋原創作品!

相關文章