专用构造函数是一个特殊的实例构造函数。 它通常用于仅包含静态成员的类中。 如果类具有一个或多个私有构造函数,并且没有公共构造函数,则其他类(嵌套类除外)无法创建此类的实例。 例如:
C#
class NLog
{
// Private Constructor:
private NLog() { }
public static double e = Math.E; //2.71828...
}
空构造函数的声明可防止自动生成无参数构造函数。 请注意,如果不对构造函数使用访问修饰符,默认情况下它仍将是私有的。 但是,专用 修饰符通常用于明确说明无法实例化该类。
专用构造函数用于防止在没有实例字段或方法(如 Math 类)或调用方法以获取类实例时创建类的实例。 如果类中的所有方法都是静态的,请考虑将完整的类静态化。 有关详细信息,请参阅 静态类和静态类成员。
下面是使用专用构造函数的类的示例。
C#
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: {Counter.currentCount}");
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
// Output: New count: 101
请注意,如果从示例中取消注释以下语句,它将生成错误,因为构造函数由于其保护级别而无法访问:
C#
// Counter aCounter = new Counter(); // Error