2010年10月2日 星期六

如何紀錄宣告物件的數量

在許多程式設計實例中,經常需要知道某特定類別在目前已經宣告了多少物件,這時就需要宣告一個靜態(static)的欄位來記錄宣告物件的總數,當物件呼叫建構子(constructor)建立新的執行個體時,將這個紀錄值累加就行了。例如下列的C#程式碼範例
    class Point
    {
        public int x, y;
        private static int pointCount = 0;
        public Point()
        {
            pointCount++;
        }
        public Point(int x, int y)
            : this()
        {
            this.x = x; this.y = y;
        }
    }

這個範例有兩個建構子,第一個無參數建構子在呼叫時會將pointCount累加;第二個兩參數建構子呼叫this(),表示在執行該建構子區塊前,會先呼叫無參數建構子,也就會累加pointCount,這種方式就可以紀錄以建構子建立執行個體的次數。

說明與建議

  • 這僅能從類別中知道物件數量,並無法知道各個物件的內容。
  • 為避免pointCount被意外覆寫,宣告為private,若需讀取此值,可另建方法傳回此值。
  • 當某些物件不再使用時,可覆寫物件的Finalize()方法,並將pointCount累減。
  • 當物件設定為null時,pointCount不會自行累減。若要將pointCount累減,必須將pointCount宣告為屬性,即可在set區塊中,判斷value為null時,將pointCount累減。

沒有留言:

張貼留言