3

いくつかの違いを除いて、ほとんど同じことを行うメソッドのリストがあります。

void DoWork(string parameter1, string parameter2)

{

//Common code
...

//Custom code
...

//Common code
...

}

別のメソッドからカスタム コードを渡すことで、共通コードを再利用してソリューションを簡素化したい。

これを達成するには、パラメーター付きのアクションを使用する必要があると思いますが、その方法がわかりません。

4

5 に答える 5

2

Template メソッド パターンを試すことができます

これは基本的にこのようなものを述べています

abstract class Parent
{
   public virtual void DoWork(...common arguments...)
   {
      // ...common flow
      this.CustomWork();
      // ...more common flow
   }

   // the Customwork method must be overridden
   protected abstract void CustomWork();
}

子クラスで

class Child : Parent
{
   protected override void CustomWork()
   {
      // do you specialized work
   }
}
于 2012-06-05T19:58:49.977 に答える
1

カスタムコードで2つの文字列パラメータを使用する必要があると仮定すると、次のように作業を完了できます。カスタムコードの結果を実際に気にしない場合は、に置き換えることができFunc<string, string, TResult>ますAction<string, string>。さらに、カスタムコードがその上の共通コードからの結果を処理する必要がある場合は、Func <>(またはAction <>)が取り込むパラメータータイプを調整してから、適切な値を渡すことができます。

void DoWork(string parameter1, string parameter2, Func<string, string, TResult> customCode) {
    //Common code 
    var customResult = customCode(parameter1, parameter2);
    //Common code 
}

使用Func<T, TResult>: http: //msdn.microsoft.com/en-us/library/bb534960

使用Action<T>: http: //msdn.microsoft.com/en-us/library/018hxwa8

于 2012-06-05T19:57:32.720 に答える
1

他の回答は素晴らしいですが、カスタム コードから何かを返す必要がある場合があるため、代わりに Func を使用する必要があります。

void Something(int p1, int p2, Func<string, int> fn)
{
   var num = p1 + p2 + fn("whatever");
   // . . .
}

次のように呼び出します。

Something(1,2, x => { ...; return 1; });

または:

int MyFunc(string x)
{
    return 1;
}

Something(1,2 MyFunc);
于 2012-06-05T20:00:31.940 に答える
1

これを処理するにはデリゲートを使用します。次のようになります。

void DoWork(string parameter1, string parameter2, Action<string,string> customCode)
{
    // ... Common code
    customCode(parameter1, parameter2);
    // ... Common code
    customCode(parameter1, parameter2);
    // ... Common code
}
于 2012-06-05T19:47:57.947 に答える
1

カスタム コードが共通コードと対話する必要がない場合は、次のように簡単です。

void DoWork(..., Action custom)
{
    ... Common Code ...
    custom();
    ... Common Code ...
}
于 2012-06-05T19:48:07.450 に答える