C#方法调用委托

时间:2009-01-17 11:24:31

标签: c# linq methods delegation

假设我有一个DLL程序集,包含一个自动生成的类,有两个方法:

public class AutoGeneratedClass
{
    public int DoSomething(bool forReal) { ??? }
    public void DoSomethingElse(string whatever) { ??? }
}

方法可以是任何东西,真的。以上只是一个例子。

我需要用什么样的代码来代替???以上是让它自动打包调用的参数并将它们发送到另一个类的单个泛型方法,然后实际处理该调用并返回结果?

public class GenericClass
{
    public ??? GenericHandler(???) { ??? }
}

我想我正在寻找与LINQ中的Expression<Func<...>>类似的东西,它编译成一个可以在任何地方发送并在那里拆开的数据结构。

我希望将原始方法原型保持原样,就像它们是正常的,本地实现的方法一样,以保持AutoGeneratedClass的调用者不是更明智的。

如果无法实现,我的选择是什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

你需要上课吗?使用接口可以轻松生活 - 然后您可以使用System.Runtime.Remoting.Proxies.RealProxy或者根据需要创建新类型。我相信Rhino.Mocks执行后者(使用库来完成繁重的工作) - 如果你可以使用接口,看看如何实现Rhino.Mocks可能是一个很好的起点

答案 1 :(得分:0)

因为我不确定你的所有限制是什么,所以我会在黑暗中刺伤。这听起来像是AutoGenerated类的部分方法/部分类的好例子。 (注意我没有通过编译器运行这个好东西所以它可能需要一些清理。)

public partial class AutoGenerated
{
    public partial int ProcessDoSomething(bool forReal);
    public int DoSomething(bool forReal)
    {
        //some generated code against error conditions??
        return ProcessDoSomething(forReal)
    }

    .....
}

public partial class AutoGenerated
{
    public partial int ProcessDoSomething(bool forReal)
    {
        //call the generic handler...
    }
}

我将远离通用处理程序中类似LINQ的表达式部分,因为我还在处理grokking表达式。但是要考虑的是,如果沿着类似LINQ的表达式路径,你的GenericClass将难以维护吗?

我的经验是,不少开发人员对代表和lamba表达式感到不舒服。在查看使用表达式的代码时,它们会(字面上)畏缩。