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
}