2
爲什麼可以創建一個私有類型的公共別名?爲什麼你可以創建一個私有類型的公共別名?
我似乎無法把握爲什麼這樣的功能是理所當然的,無論是功能還是一個bug。
舉個例子。
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