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
}