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

}