基于Interface的匿名类型

时间:2011-03-02 23:18:21

标签: c#

我可以用类似于

的方式创建接口的匿名实现
delegate() { // type impl here , but not implementing any interface}

的内容
new IInterface() { // interface methods impl here }

我认为它们有用的情况是指定作为接口类型的方法参数,以及创建类类型的代码太多的代码。

例如,请考虑这样:

    public void RunTest()
    {
        Cleanup(delegate() { return "hello from anonymous type"; });
    }

    private void Cleanup(GetString obj)
    {
        Console.WriteLine("str from delegate " + obj());
    }

    delegate string GetString();

如果在上面的代码中,Cleanup将接口作为参数,而不编写类定义,将如何实现? (我认为Java允许像新的Interface()...)

这样的表达式

3 个答案:

答案 0 :(得分:5)

您可以查看impromptu-interface。允许您使用Duck Typing Interface包装任何对象。

答案 1 :(得分:3)

没有标准的语言语法。要动态创建 IInterface的实现,您可以使用Reflection.Emit,也可以使用涉及泛型的内容和/或Action<...> / Func<...>(有或没有{ {1}}),但这是一项非常重要的工作。

基本上,这就是许多模拟框架所做的事情。或许看看他们。

答案 2 :(得分:0)

private void CleanUp(Func<string> obj){
  Console.WriteLine("str from delegate " + obj.Invoke());
}

public void RunTest(){
   Cleanup(() => "hello from anonymous type");
 }
  • 虽然没有真正实现接口......