2

クラス A、B、および C に共通のインターフェイスがあります。しかし、クラス B にのみ適用され、クラス A および C には適用されない 2 つのメソッドを追加する必要があります。共通のインターフェース自体とクラスAおよびCで実装されていない例外をスローするか、これを行うためのより良い方法はありますか?

interface ICommon
{
   Method1;
   Method2;
   Method3;
   Method4;
}

Class A: ICommon
{
   Method1;
   Method2;
}

Class B: ICommon
{
   Method1;
   Method2;
   Method3;
   Method4;
}

Class C: ICommon
{
   Method1;
   Method2;
}

前もって感謝します

4

3 に答える 3

8

これらのメソッドが (B だけでなく) 他のクラスに共通している場合:

Bに別のインターフェースを拡張させる

interface ICommon2
{
    Method3;
    Method4;
}

class B : ICommon, ICommon2
{
    Method1;
    Method2;
    Method3;
    Method4;
}

これらのメソッドが B のみに固有の場合:

class B : ICommon
{
    Method1;
    Method2;
    Method3;
    Method4;
}
于 2013-05-10T17:16:51.610 に答える
1

インターフェイスにメソッドがある場合は、それらを実装する必要がありますが、秘密裏に実行できます。

Class A: ICommon
{
   public void Method1() 
   {
   }

   public void Method2() 
   {
   }

   void ICommon.Method3() 
   {
       throw new NotSupportedException();
   }

   void ICommon.Method4() 
   {
       throw new NotSupportedException();
   }
}

これはまさに、配列がIListインターフェイスを実装し、 のようなメンバーを非表示にする方法Addです。

于 2013-05-10T17:32:30.843 に答える
0

2 つのクラスが同じインターフェイスを実装する必要があるが、クラスの 1 つがインターフェイスに含まれるよりも多くのメソッドを必要とする場合、それらのメソッドはそのインターフェイスに属しません。そうしないと、他のクラスにもこれらのメソッドが必要になります。

IDisposable が Dispose() メソッドを指示するように、インターフェイスは動作を記述します。Method3() と Method4() が特定の動作を実装する場合、これら 2 つのメソッドからのみインターフェイスを抽出し、それらのメソッドを必要とするクラスにそのインターフェイスを適用する必要があります。

于 2013-05-10T17:20:06.227 に答える