解析C#中的私有构造函数和静态构造函数

2019-12-26 17:30:11于海丽
易采站长站为您分析C#中的私有构造函数和静态构造函数,是C#入门学习中的基础知识,需要的朋友可以参考下  

私有构造函数
私有构造函数是一种特殊的实例构造函数。它通常用在只包含静态成员的类中。如果类具有一个或多个私有构造函数而没有公共构造函数,则其他类(除嵌套类外)无法创建该类的实例。例如:


class NLog
{
  // Private Constructor:
  private NLog() { }

  public static double e = Math.E; //2.71828...
}

声明空构造函数可阻止自动生成默认构造函数。注意,如果您不对构造函数使用访问修饰符,则在默认情况下它仍为私有构造函数。但是,通常显式地使用 private 修饰符来清楚地表明该类不能被实例化。
当没有实例字段或实例方法(如 Math 类)时或者当调用方法以获得类的实例时,私有构造函数可用于阻止创建类的实例。如果类中的所有方法都是静态的,可考虑使整个类成为静态的。

下面是使用私有构造函数的类的示例。


public class Counter
{
  private Counter() { }
  public static int currentCount;
  public static int IncrementCount()
  {
    return ++currentCount;
  }
}

class TestCounter
{
  static void Main()
  {
    // If you uncomment the following statement, it will generate
    // an error because the constructor is inaccessible:
    // Counter aCounter = new Counter();  // Error

    Counter.currentCount = 100;
    Counter.IncrementCount();
    Console.WriteLine("New count: {0}", Counter.currentCount);

    // Keep the console window open in debug mode.
    Console.WriteLine("Press any key to exit.");
    Console.ReadKey();
  }
}

输出:


New count: 101

注意,如果您取消注释该示例中的以下语句,它将生成一个错误,因为该构造函数受其保护级别的限制而不可访问:


// Counter aCounter = new Counter();  // Error

 

静态构造函数
静态构造函数用于初始化任何静态数据,或用于执行仅需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。


class SimpleClass
{
  // Static variable that must be initialized at run time.
  static readonly long baseline;

  // Static constructor is called at most one time, before any
  // instance constructor is invoked or member is accessed.
  static SimpleClass()
  {
    baseline = DateTime.Now.Ticks;
  }
}