Почему можно создать публичный псевдоним для частного типа?Почему вы можете создать публичный псевдоним для частного типа?
Я не могу понять, почему такая функциональность предоставляется и является ли это особенностью или ошибкой.
Возьмем, к примеру.
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
, то компилятор жалуется, как будто я думал бы, что это произойдет, когда он увидит публичный псевдоним для частного типа.
Я бы предпочел, чтобы компилятор фактически отказался от такого рода вещей, но я думаю, что это не так.
Итак, мой вопрос в том, почему компилятор не жалуется на такое использование и в чем именно причина этой функции?
Возможно, одним из потенциальных вариантов использования является то, что вы знаете, что реализация изменится. Единственное, что вам нужно сделать, это изменить строку псевдонима на 'public alias StableFoo = MyNewFoo;' – DejanLekic
По той же причине, что многие языки позволяют писать публичный getter/setter для частного поля. Это обычная практика в некоторых сообществах, и иногда есть даже веская причина для этого. – rcorre