2017-11-25 5 views
0

私はインターフェースを作成しています。内部プロパティーとのインターフェース

internal interface MyInterface 
{ 
    string Prop { get; } 
} 

これは内部インターフェイスです。私はプロジェクト内でこれを使用するためにインデントし、Propを一般に公開したくありません。しかし、このインターフェイスをクラスに実装しようとすると、Propプロパティを公開するように強制されます。インターフェイス自体が内部で、内部的にしか使用できない場合、なぜこのプロパティをパブリックにする必要があるのか​​分かりません。

+0

インターフェイスがクラスの内部になるようにクラス内に配置します。クラスの外に出ると、それを公開するように強制されます。 – jdweng

+0

@jdweng動作しません。どこに置いても、静的です。 –

答えて

3

インターフェイス自体は、オブジェクトの一般公開機能の契約にすぎないためです。非公開のものは実際にそこに属していませんが、代わりに実装タイプに進むことができます。

しかし、基本的には問題にはなりません。 タイプinternalの場合、そのタイプのプロパティはそのスコープの外には表示されません。彼らはどうやってできるのだろうか?型自体は、そのスコープ外では知られていません。 (MyInterfaceが何であるか分からないコードは、MyInterface.Propが何であるかは分かりません)

プロパティは、消費コードがそれらを見ることができるという意味でpublicです。しかし、これは最初にそのタイプを消費できるコードに対してのみ重要であり、そのアセンブリにはinternalしかありません。

+0

私は、 'MyInterface.Prop'がそのスコープの外には見えず、それが私の必要なものです。しかし、それは考慮されている、なぜそれが範囲外で使用することができない場合、プロパティは、公開する必要がありますとにかくですか? –

+0

@NevilleNazerane:インタフェースとは公開されている機能の定義です。インタフェース*自体は物事の可視性を定義していないことに注意してください。すべてが公開されているからです。 1つの実装タイプがプロパティを「public」とマークし、もう1つを「protected」とマークした場合はどうなりますか? 2つ目は、実際にインターフェイスを実装することではありません。コンパイラはそれを許すことはできません。 – David

関連する問題