0
class A : N
{
     void sinefunc()
     {
           //some stuff here
     }
}

class B : N
{

    void sinefunc()
    {
        //some stuff here
    }
}

class C : N
{ 
    void sinefunc()
    {
         //some stuff here
    }
}

sinefunc()共通の機能です。ただし、クラス A、B、および C は、ソリューションの下の異なるプロジェクトに存在します。クラスはすでに共通のクラス N を継承しており、現在、

  1. コードの繰り返しを避けるために、sinefunc()をこれらのクラスの外に移動できます。
  2. ただし、多重継承は許可されていないためです。関数を共通にするための効率的な方法または実行可能な方法は何ですか? (クラス N には入れたくないことに注意してくださいsinefunc() 。それは既に書かれており、そのクラスを邪魔したくありません。
4

3 に答える 3

4

(sinefunc() をクラス N に入れたくないことに注意してください。既に作成されており、そのクラスを妨害したくありません)

関数をNクラスに移動しないと、それはできません。メソッド署名を持つインターフェースを持つことができますが、各クラスで実装を定義する必要があります。

それを行う 1 つの方法は、クラスに拡張メソッドを記述するNことであり、継承されたクラスでそれを使用できます。

編集:

次のような拡張メソッドを保持する静的クラスを定義します。

public static class ExtensionClass
{
    public static void sinefunc(this N obj)
    {
        // your code
    }
}

後で次のように呼び出すことができます。

static void Main(string[] args)
{
    A objA = new A();
    objA.sinefunc();
}

拡張メソッドを保持している名前空間を含めることを忘れないでください。そうしないと、表示されません。 詳細については、MSDN の拡張メソッドを参照してください。

于 2013-01-02T06:30:57.300 に答える
2

class のファサードとして機能する中間クラスを作成できますN

class A : X {    }

class B : X {    }

class C : X {    }

class X : N
{
     protected void sinefunc()
     {
           //some stuff here
     }
}
于 2013-01-02T06:33:33.100 に答える
0

sinefunc() が一般的な関数である場合は、別のクラスに入れてみませんか。たとえば、Utility クラスの静的メソッドにすることができます

于 2013-01-02T06:33:09.873 に答える