2012-01-17 6 views
2

C#およびNET 4.0を使用して、内部インターフェイス(IMethod)を実装する2つのパブリックインターフェイス(IAsyncMethodおよびISyncMethod)最初の2つ、および3番目の内部のために、私は別のdll /プロジェクト/開発者用の2つのパブリックインターフェイスのみを有効にできます。他のパブリックインターフェイスで実装された内部インターフェイスへのアクセスを制限する方法

Inconsistent accessibility: base interface 'IMethod' is less accessible than interface 'ISyncMethod' 
Inconsistent accessibility: base interface 'IMethod' is less accessible than interface 'IAsyncMethod' 

私は私が必要とする動作を許可するように修飾子を設定します方法:私はプロジェクトをビルドするとき

internal interface IPaymentMethod 
{ 
    XmlDocument StartTransaction(XmlDocument parameters); 
    XmlDocument QueryTransaction(XmlDocument parameters); 
} 

public interface ISyncMethod : IMethod 
{ 
    void EndTransaction(TransactionDTO parameter); 
} 

public interface IAsyncMethod : IMethod 
{ 
    void EndTransaction(TransactionDTO parameter); 
} 

、私はこれらのエラーを受け取りますか?

答えて

3

これは、「どのように修飾子を設定する」の問題が、相続の基礎の問題ではありません:のは、(サードパーティのコード内)に見てみましょう

ISyncMethod sm=new ClassImplementingISyncMethod(); 
IMethod m=(IMethod) sm; 

ISyncMethodから継承するとして、これは、有効です方法。 IMethodにアクセスできない場合、これは不可能です。

有効ですが不可能な組み合わせです。コンパイラは嫌いです。

0

タイプのすべてのベースとインターフェースは、少なくともそのタイプと同じ目で見える必要があります。したがって、内部/プライベート型/インターフェイスはパブリックなものを継承/実装できます。それ以外の方法ではありません。

考えてみましょう - 特定のタイプのみがアセンブリからエクスポートされます。アセンブリの消費者として、これらのタイプが提示されており、IMethodのインタフェースがインタフェースとしてリストされていれば、そのインタフェースの宣言をどこかに見つけることが予想されるため、困惑します。しかし、それは内部的なものなので、あなたはそうしないでしょう。

同じように、タイプ/インタフェースが継承/実装型によって邪魔される可能性がある場合は、タイプ/インタフェースの可視性修飾子のポイントは何ですか?

関連する問題