使方法独立工作而不使用通用方法

时间:2013-09-12 22:05:18

标签: c# .net

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

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

有没有办法可以单独实现它们而不用遍历方法将它们一起声明并在main函数中分别调用store和checker方法。我可以在store和checker方法中实现遍历方法,但我想知道是否有任何方法可以执行此操作而不是再次复制相同的代码。

2 个答案:

答案 0 :(得分: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();
});

EDIT / UPDATE(= UPDIT :-))

您还可以使委托成为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();

答案 1 :(得分:0)

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

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中,您可以传入一个实现IPerformMethod的对象(在这种情况下,它是CheckerStore的实例)。

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

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

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