2016-12-28 8 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

おそらく、潜在的なユースケースの1つは、実装が変更されることを事前に知っている場合です。あなたがしなければならないのは、エイリアス行を 'public alias StableFoo = MyNewFoo;'に変更することだけです。 – DejanLekic

+1

多くの言語でプライベートフィールド用のパブリックゲッター/セッターを書くのと同じ理由があります。これは一部のコミュニティでは一般的な方法であり、場合によってはそれにも正当な理由があります。 – rcorre

答えて

4

このような構成では、モジュールの機能の実装を非表示にすることができます。クラスに関連付けられていないクラスを1つの名前に公開すると、適切なエイリアスをエクスポートしない限り、いつでも変更できます。

ご覧のとおり、コンパイラが不平を言う理由はありません。

関連する問題