c# 中的私有构造函数
原文:https://www . geesforgeks . org/private-constructors-in-c-sharp/
先决条件:C# 中的构造函数
私有构造函数是 c# 语言中存在的特殊实例构造函数。基本上,私有构造函数用在只包含静态成员的类中。私有构造函数总是使用private
关键字声明的。
重要点:
- 它是单例类模式的实现。
- 当类只有静态成员时,使用私有构造函数。
- 使用私有构造函数,可以防止创建该类的实例。
- 如果一个类只包含不带参数的私有构造函数,那么它会阻止默认构造函数的自动生成。
- 如果一个类只包含私有构造函数,而不包含公共构造函数,那么除了嵌套类之外,不允许其他类创建该类的实例。
语法:
private constructor_name
{
// Code
}
注意:如果我们不使用任何访问修饰符来定义构造函数,那么编译器会将该构造函数作为私有的。
例 1:
// C# program to illustrate the
// concept of private Constructor
using System;
public class Geeks {
// Private constructor
// without parameter
private Geeks()
{
Console.WriteLine("Private Constructor");
}
}
// Driver Class
class GFG {
// Main Method
static void Main() {
// This line raise error because
// the constructor is inaccessible
Geeks obj = new Geeks();
}
}
编译时错误:
prog.cs(40,13):错误 CS0122: `Geeks.Geeks()'由于其保护级别而不可访问
解释:在上面的例子中,我们有一个类叫做极客。Geeks 类包含私有构造函数,即private Geeks()
。在 Main 方法中,当我们试图使用这个语句Geeks obj = new Geeks();
访问私有构造函数时,编译器会给出一个错误,因为构造函数不可访问。
例 2:
// C# program to illustrate the
// concept of private Constructor
using System;
class Geeks {
// Variables
public static string name;
public static int num;
// Creating private Constructor
// using private keyword
private Geeks() {
Console.WriteLine("Welcome to Private Constructor");
}
// Default Constructor
// with parameters
public Geeks(string a, int b) {
name = a;
num = b;
}
}
// Driver Class
class GFG {
// Main Method
static void Main() {
// This line raises error because
// the constructor is inaccessible
// Geeks obj1 = new Geeks();
// Here, the only default
// constructor will invoke
Geeks obj2 = new Geeks("Ankita", 2);
// Here, the data members of Geeks
// class are directly accessed
// because they are static members
// and static members are accessed
// directly with the class name
Console.WriteLine(Geeks.name + ", " + Geeks.num);
}
}
输出:
Ankita, 2
解释:上面的例子包含一个名为极客的类。这个 Geeks 类包含两个静态变量,即名称,和 num 以及两个构造函数一个是私有构造函数,即private Geeks()
,另一个是有两个参数的默认构造函数,即public Geeks(string a, int b)
。在 Main 方法中,当我们试图使用这个语句调用私有构造函数时Geeks obj1 = new Geeks();
会给出一个错误,因为私有构造函数不允许创建 Geeks 类的实例。唯一的默认构造函数将调用。
版权属于:月萌API www.moonapi.com,转载请注明出处