2009-06-24 12 views
3

もう一つの翻訳の質問ですが、これはもっと理論的かもしれませんが、私はデザインの選択について興味があります。 SFNQ:Java2C#翻訳:C#のインタフェースのパブリックメソッド

なぜC#はJavaのようにインターフェイスのメソッドへのアクセスを制御することを制御できないのですか?たとえば、C#のインターフェイスに:

public void Visit(Axiom axiom); 

ありがとうございました。

答えて

5

C#とJavaの両方で、インターフェイス上のすべてのメソッドはpublicです。

Javaでは、パブリックキーワードが許可されており、解析ルールを保存する可能性があります。 C#では、パブリックキーワードは重複しているとみなされ、インターフェイス宣言から完全に削除されました。

+1

修正:Javaでは、publicキーワードはオプションであり、存在する場合は無視されます。 –

+1

冗長だけでなく、実際にはコンパイラエラーです。私のための不満の絶えない源、JavaからC#に来る。 –

+1

ありがとうございます。しかし、それは "冗長"以上です、私はそれを入れてみると、コンパイラは私に叫ぶでしょう。 –

6

C#および一般的には、インターフェイスのすべてのメソッドは既定ではパブリックです。彼らのアクセスを制限する方法はありません。

代わりに、インターフェース上に保護されたメンバーを持つことはどういう意味でしょうか?特定のメソッドへのインターフェイスアクセスの呼び出し元を許可または拒否するアクセスルールをどのように設定しますか? (私はC#の意味ではなく、Javaで保護されているという意味です)。

さらにプライベートの意味は?

+1

'internal' /' Friend'は、理論的には意味をなさないかもしれません。しかし、私はこれまで必要だったものではありません。 –

+0

これらのオプションは意味をなさないが、明示的なインターフェイス実装に頼ることなく、内部インターフェイスの内部実装を許可することは時々役に立ちます。 –

+0

メソッドのセットが異なる複数のインターフェイスを持ち、さまざまなクライアントに渡すことができます。 – akarnokd

4

C#では、インターフェイスのすべてのメンバーはパブリックである必要があります。したがって、メンバーシップ宣言に可視性変更子を追加することはできません。したがって、パブリックキーワードは冗長であり、必要ではありません(実際に含めると、コンパイラエラーが発生します)。

インターフェイスは、インターフェイス定義に指定されているすべての機能を提供する契約書です。インターフェイスにプライベートメンバーを置くことが許可されている場合、その機能を公開していないので、契約に違反します。

+1

+1。実際には、もう少し多くを取得する必要があります。ヒント、人々! – Randolpho

+0

ありがとうRandolpho :-) –