D - 构造函数上的访问修饰符实际上有什么作用?



假设我有以下代码:

class Foo
{
private this(int x){ }
}
void
main()
{
auto f = new Foo(4);
}

令我惊讶的是,这实际上是编译的。我希望私有构造函数在它定义的类之外无法使用,就像方法一样,但事实显然并非如此。语言参考甚至没有在构造函数部分中提及访问修饰符。

所以问题是双重的:访问修饰符在应用于构造函数时做什么(如果它做任何事情(,以及如何隐藏 ctor?

构造函数上的访问修饰符的工作方式与其他地方的访问修饰符完全相同......但要记住的关键是,在 D 中,访问控制仅适用于模块外部。同一模块中的所有内容也可以看到模块内的其他内容,但私有 ctor 会阻止模块外部的构造。

这与许多其他编程语言不同。这个想法是 D 模块允许您定义帮助程序类,而无需像 C++ 的friend功能。

最新更新