【发布时间】:2015-03-12 16:52:35
【问题描述】:
我遇到了这样一个嵌套类的源代码:
public class OuterClass
{
// code of the outer class
protected class NestedClass
{
private string myVar;
private NestedClass() {} // <--- empty private ctor
public NestedClass(string myVar)
{
this.myVar = myVar;
}
}
}
创建这个空的私有构造函数的原因是什么?
我知道在实现单例时,构造函数必须是私有的,以防止其他类创建实例。但是,如果是另一个公共构造函数,所以这不是原因。
我想到的一个原因是不允许创建没有变量值的实例,该变量作为参数传递给公共构造函数,但据我所知,当除了带参数的公共构造函数之外,没有其他构造函数。对吗?
编辑:一个现在被删除的答案,提到了默认构造函数。据我所知,只有在根本没有手动编写的构造函数时才存在“隐藏”默认构造函数。这是here描述的:
这些构造函数被注入到所有不引入其他构造函数的类声明中。
因此,我的嵌套类的空构造函数不是默认构造函数,而只是一个没有参数的构造函数。我假设顶级类和嵌套类都是这种情况。
【问题讨论】:
-
该代码无法编译。我猜你的意思是
private NestedClass(){} -
除非您在自身内部创建
NestedClass的实例,否则私有空构造函数不适用于在类外部创建实例。 -
@MatthewWatson 你是对的
-
我认为将默认构造函数设为私有没有任何意义,除了可以通过反射调用它。
-
@PhilippM 根据代码上下文,NestedClass 无法使用默认构造函数进行实例化。它施加的限制是:始终使用参数化构造函数,其中参数的值对于构建实例很重要。
标签: c#