-1

私は次のようなシナリオを持っています:

    public class A : class B
    {
         public SomeMethodA()
         {
              //.... do some logics here
              SomeMethodB();
         }

         private SomeMethodB()
         {
              //.... do some logics here
         }

    }

class B : class C

class X : class Y
{
     public SomeMethodA()
     {
          //.... do some logics here
          SomeMethodB();
     }

     private SomeMethodB()
     {
          //.... do some logics here
     }
}

class Y : class Z

クラス A には、クラス X とまったく同じメソッドがあります。ここでの問題は、クラス Y、Z およびクラス B、C を変更/変更せずにコードが DRY (自分自身を繰り返さない) になるように、このメソッドを一元的に組み合わせるにはどうすればよいかということです。クラス B、C、Y、および Z はレガシ コードであり、これらのクラスを変更/修正しようとはしていません。

何かご意見は?

4

1 に答える 1

3

あなたが編集してより明確にしたので。私はこれがうまくいくと信じています。X と A が継承する共通のクラスを作成するだけです。

public abstract class Common
{
     public SomeMethodA()
     {
          //.... do some logics here
          SomeMethodB();
     }

     private SomeMethodB()
     {
          //.... do some logics here
     }
}

public class A : Common { /* some other methods */ }
public class B : A { /* some other methods */ } //B inherits A
public class C : B { /* some other methods */ } //C inherits B

public class X : Common { /* some other methods */ }
public class Y : X { /* some other methods */ } //Y inherits Z
public class Z : Y { /* some other methods */ } //Z inherits Y

2回目の編集:

public class Common
{
     public void SomeMethodA()
     {
          //.... do some logics here
          SomeMethodB();
     }

     private void SomeMethodB()
     {
          //.... do some logics here
     }
}

次に、クラス A と X の両方で、次のようにします。

public void SomeMethod() {
    Common c = new Common();
    c.SomeMethodA();
}
于 2013-02-27T21:40:58.697 に答える