为什么可以为私有类型创建公共别名?

时间:2016-12-28 11:00:25

标签: d

为什么可以为私有类型创建公共别名?

我似乎无法理解为何授予此类功能,以及它是一个功能还是一个错误。

以举例为例。

  

foo.d

module foo;

private class Foo { }

public alias NewFoo = Foo;
  

main.d

import foo;

void main() {
    auto foo = new NewFoo;

    // Foo can be used ...
}

我知道如果您不希望Foo可用,那么您必须将构造函数声明为私有且可能是Foo的所有成员。

此外,如果尝试直接使用Foo,那么编译器会抱怨,就像我认为当它看到公共别名指向私有类型时会这样做。

我本以为编译器实际上不允许这种事情,但我想情况并非如此。

所以我的问题是为什么编译器不抱怨这种用法以及这个功能背后的原因究竟是什么?

1 个答案:

答案 0 :(得分:4)

这样的构造允许您隐藏模块功能的实现,并且在暴露一个类之后,您没有绑定一个名称 - 您可以随时更改它,除非您导出正确的别名。

正如您所看到的,编译器没有理由抱怨。