プライベートタイプのパブリックエイリアスを作成するのはなぜですか?プライベートタイプのパブリックエイリアスを作成できるのはなぜですか?
なぜこのような機能が付与されているのか、それが機能かバグかはわかりません。
たとえば、
ソース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
多くの言語でプライベートフィールド用のパブリックゲッター/セッターを書くのと同じ理由があります。これは一部のコミュニティでは一般的な方法であり、場合によってはそれにも正当な理由があります。 – rcorre