2016-12-28 10 views
2

Почему можно создать публичный псевдоним для частного типа?Почему вы можете создать публичный псевдоним для частного типа?

Я не могу понять, почему такая функциональность предоставляется и является ли это особенностью или ошибкой.

Возьмем, к примеру.

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

Возможно, одним из потенциальных вариантов использования является то, что вы знаете, что реализация изменится. Единственное, что вам нужно сделать, это изменить строку псевдонима на 'public alias StableFoo = MyNewFoo;' – DejanLekic

+1

По той же причине, что многие языки позволяют писать публичный getter/setter для частного поля. Это обычная практика в некоторых сообществах, и иногда есть даже веская причина для этого. – rcorre

ответ

4

Такая конструкция позволяет скрыть реализацию функций модуля и после того, как вы подвергли класс, который вы не привязаны к одному имени, вы можете изменить его в любое время, если вы не экспортируете правильный псевдоним.

Как вы можете видеть, нет никаких оснований для жалобы компилятора.

 Смежные вопросы

  • Нет связанных вопросов^_^