将密码作为参数传递给方法

3

我有一个方法列表,这些方法基本上做的是相同的事情,只是有一些不同:

void DoWork(string parameter1, string parameter2)

{

//Common code
...

//Custom code
...

//Common code
...

}

我希望通过从另一个方法传递自定义代码来重用常用代码来简化解决方案。
我认为我需要使用具有参数的操作来实现这一点,但我不知道如何做。

4
您需要提供一个更为完整的例子才能得到任何帮助。 - cadrell0
说实话,如果您没有提供足够的信息,很难给出精确的回答,我们只是根据假设猜测可能是正确答案。如果您能够提供更多上下文,那将非常好 =) - Jupaol
5个回答

2
你可以尝试使用模板方法模式,这基本上是这样陈述的。
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
   }
}

1
您可以使用委托来处理此事。它可能看起来像这样:
void DoWork(string parameter1, string parameter2, Action<string,string> customCode)
{
    // ... Common code
    customCode(parameter1, parameter2);
    // ... Common code
    customCode(parameter1, parameter2);
    // ... Common code
}

1
如果自定义代码不必与公共代码交互,那么很容易:
void DoWork(..., Action custom)
{
    ... Common Code ...
    custom();
    ... Common Code ...
}

1

假设您需要在自定义代码中使用两个字符串参数,则以下内容应该可以完成工作。如果您实际上不关心自定义代码的结果,可以将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/zh-cn/library/bb534960

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


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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接