C# 私有構造函數的做用(可實現Singleton模式)

C#編程語言容許在類中定義私有的構造函數,私有構造函數的做用是:阻止外部程序建立類的實例。使用私有構造函數,能夠在C#中便捷地實現Singleton模式。

本示例主要說明了如何在程序中使用私有構造函數,技術要點以下。
—    由於類具備默認的構造函數,因此在一些須要阻止外部程序建立類實例的場合,須要顯式聲明私有構造函數。聲明瞭私有構造函數的類,不能在類的外部建立類實例。
—    使用sealed關鍵字聲明的類,稱爲密封類,被聲明的類不可以派生子類。

操做步驟以下:
(1)建立控制檯應用程序項目,命名爲「PrivateConstruct」。
(2)打開並編輯Program.cs文件,代碼以下所示。
using System;
using System.Collections.Generic;
using System.Text;
namespace PrivateConstruct
{
    class Program
    {
        static void Main(string[] args)
        {
            Copyright copyright = Copyright.CurrentCopyRight;
            copyright.Company_Name = "***軟件公司";
            copyright.Begin_Date = DateTime.Parse("2002-01-01");
            copyright.End_Date = DateTime.Now;
            Console.WriteLine("Copyright(c.):{0} {1}-{2}",
                copyright.Company_Name,
                copyright.Begin_Date.Year,
                copyright.End_Date.Year);
            Console.ReadLine();
        }
    }
    sealed class Copyright//表示版權信息的類
    {
        public string Company_Name;
        public DateTime Begin_Date;
        public DateTime End_Date;
        private Copyright()//私有構造函數
        {
        }
        //提供靜態的Copyright類實例供外部程序調用
        public static Copyright CurrentCopyRight = new Copyright();
    }
}
(3)按F5鍵運行程序,運行結果以下所示。
Copyright(c.):***軟件公司 2002-2007



源程序解讀

(1)在本示例定義了一個表示版權信息的Copyright類,並在該類中定義了私有構造函數,阻止外部程序建立該類的實例。同時,提供一個靜態實例供外部程序調用。
(2)Copyright類的聲明語句包含sealed關鍵字,目的是爲了更好地實現Singleton模式,即該類不能派生子類。排除在派生子類中建立類實例的可能。


開發實例:


public class EligibilityService {
        /// <summary>
        /// Singleton 單一模式
        /// </summary>
         private static EligibilityService instance = new EligibilityService();
        private IDaoManager daoManager = null;
        private IEligibilityDao eligibilityDao = null;

        /// <summary>
        /// 
        /// </summary>
         private EligibilityService() {
            daoManager = ServiceConfig.GetInstance().DaoManager;
            eligibilityDao = daoManager.GetDao(typeof(IEligibilityDao)) as IEligibilityDao;
}

        /// <summary>
        /// 取得EligibilityService實例
        /// </summary>
        /// <returns></returns>
         public static EligibilityService GetInstance() {
            return instance;
        }


       #region 實例方法定義
public DataTable GetEligibilityByPage(...)
{
...
}
public DataSet ExportEligibility(...)
{
...
}
       #endregion

}
相關文章
相關標籤/搜索