C# 中的私有构造函数

2024 年 8 月 29 日 | 4 分钟阅读

在 C# 中,通过使用私有访问修饰符生成私有构造函数。当一个类有一个私有构造函数并且没有额外的公共构造函数时,我们无法在该类外部构造该类的对象。但是,我们可以在同一类中为这些类创建对象。

因此,最重要的一点是,当我们尝试从类外部创建对象和访问成员时,诸如生成对象、访问成员等的限制可能会生效。

在 C# 中使用同一类内的私有构造函数创建对象

不能在类外部创建实例。但是,可以在类内部创建。请查看下面的示例以获取更多信息。我们在 Program 类中定义了私有构造函数,但 Main 方法也在相同的 Program 类中定义。正如我们所见,我们正在生成 Program 类的实例并在 Main 方法中运行 Method1

文件名:Constructor.c

输出

This shows the Private Constructor
The Method1 is get Called

在 C# 中从类外部创建实例

最重要的一点是,类应该有一个公共构造函数,这样我们就可以独立于类创建实例。类是否有私有构造函数并不重要。但是,如果类有一个公共构造函数,我们可以生成类实例并使用该公共构造函数执行公共非静态函数。

请查看下面的示例以更好地理解。Test 类同时具有私有和公共构造函数以及一个公共函数。我们现在正在使用 Program 类的 Main 函数(独立于 Test 类)创建 Test 类的实例并运行 Method1 方法。

示例

输出

Public constructor
The Method1 is get Called

如果类跳过公共构造函数而只有私有构造函数会发生什么?那么,我们将无法在类外部创建实例。请参阅下面列出的示例以更好地理解。Test 类只有一个私有构造函数,当我们使用 Main 方法中的私有构造函数为 Test 类创建实例时,我们会遇到编译时错误。

示例

输出

prog.cs(9,25): error CS0122: `PrivateConstructorDemo.Tests.Tests()' is inaccessible due to its protection level
prog.cs(17,17): (Location of the symbol related to previous error)
Compilation failed: 1 error(s), 0 warnings

说明

正如您所看到的,我们收到了消息 'Test.Tests()' 不可访问,因为它受保护,这很有道理,因为 Program 类中的 Tests 类 Tests() 构造函数由于其安全级别(私有)而可用。

首先要记住的是,如果一个类缺少公共构造函数,私有构造函数会限制除了该类之外的任何人都无法实例化该类。如果它包含一个公共构造函数,我们可以在类外部创建一个新实例。在同一类中生成实例没有限制。

用例:如果我们不希望该类能够从类外部实例化,请在该类中的任何公共构造函数位置添加一个私有构造函数。

C# 中私有构造函数限制继承

这表明一个类在没有私有构造函数的情况下不能被继承。这部分也是正确的。让我们用几个例子来证明这一点。

如果一个类有一个私有构造函数和任何其他公共构造函数,则可以继承该类。子类需要一个公开可用的构造函数来形成父子关系。也就是说,无论类是否有私有构造函数,如果它有公共构造函数,我们都可以继承它。

请查看下面的示例以更好地理解。在 Parent 类中,我们有两个对象构造函数,一个私有和一个公共

示例

输出

The Public constructor of the parent class
The Public constructor of the child class