1

我目前正在尝试分离出方法实现,以便它们可以独立工作。我试图分离的方法是 store 和 checker。这两种方法都需要traverse方法。我当前的实现有两个方法存储和检查器方法,我将它们分成不同的类。它们需要在 traverse 方法中调用才能工作。这是我目前的实现。

class Traverse
{
    public void traversemethod()
    {
        Console.WriteLine("Traverse function");
        Checker r = new Checker();
        r.checkermethod();
        Store s = new Store();
        s.storemethod();
    }
}

class Checker
{
    public void checkermethod()
    {
        Console.WriteLine("Checker function");            
    }
}

class Store
{
    public void storemethod()
    {
        Console.WriteLine("Store function");
    }
}

class Compute
{
    public static void Main()
    {
        Console.WriteLine("Main function");
        Traverse v = new Traverse();
        v.traversemethod();

        Console.ReadLine();
    }

有什么方法可以单独实现它们,而无需在 traverse 方法中一起声明它们并在主函数中分别调用 store 和 checker 方法。我可以在 store 和 checker 方法中实现 traverse 方法,但我想知道是否有任何方法可以做到这一点,而不是再次复制相同的代码。

4

2 回答 2

1

听起来是使用 lambda 的完美场所:

public delegate void TraverseDelegate();
public void traversemethod(TraverseDelegate dlg){
    Console.WriteLine("Traverse function");
    dlg();
}

并在Main方法中使用:

Traverse v = new Traverse();
v.traversemethod(() => {
    Checker r = new Checker();
    r.checkermethod();
    Store s = new Store();
    s.storemethod();
});

编辑/更新(=更新 :-))

您还可以使委托成为 的成员字段Traverse,然后将其作为构造函数参数传递并在traversemethod不带任何参数的情况下调用:

public class Traverse{
    public delegate void TraverseDelegate();
    private TraverseDelegate dlg;

    public Traverse(TraverseDelegate dlg){
        this.dlg=dlg;
    }

    public void traversemethod(){
        Console.WriteLine("Traverse function");
        dlg();
    }
}

并在Main方法中使用:

Traverse v=new Traverse(()=>{
        Checker r = new Checker();
        r.checkermethod();
        Store s = new Store();
        s.storemethod();
});
v.traversemethod();
于 2013-09-12T22:23:04.787 回答
0

我不是关于 and 之间的关系CheckerStore所以我将展示一个使用 aninterface而不是基类的示例。但是,您可以创建一个可能是抽象的基类,并让每个子类实现它们的特殊方法。

interface IPerformMethod    
{
   void SpecialFunction();
}

public class Store : IPerformMethod
{
   public void SpecialFunction()
   {
       Console.WriteLine("Store function");
   }
}

public class Checker : IPerformMethod
{
   public void SpecialFunction()
   {
       Console.WriteLine("Checker function"); 
   }
}

然后在您的 中TraverseMethod,您可以传入一个实现的对象(在这种情况下,它是orIPerformMethod的一个实例)。CheckerStore

public void TraverseMethod(IPerformMethod item)
{
   Console.WriteLine("Traverse function");
   item.SpecialFunction();
}

//To call the method 
TraverseMethod(new Checker());
TraverseMethod(new Store());

(显然,您可以将IPerformMethod界面重命名为更具描述性的名称,但如果我正确理解了这个问题,这似乎就是您想要的)。

于 2013-09-12T22:16:04.220 回答