关于c#:基于Interface的匿名类型


Anonymous types based in Interface

本问题已经有最佳答案,请猛点这里访问。

我可以用类似的方式创建接口的匿名实现吗?

1
delegate() { // type impl here , but not implementing any interface}

有点像

1
new IInterface() { // interface methods impl here }

在我看来它们很有用的情况下,可以指定接口类型的方法参数,以及创建类类型的代码太多。

例如,考虑如下:

1
2
3
4
5
6
7
8
9
10
11
    public void RunTest()
    {
        Cleanup(delegate() { return"hello from anonymous type"; });
    }

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

    delegate string GetString();

如果在上面的代码中,方法清理有一个作为参数的接口,而不编写类定义,这将如何实现?(我认为Java允许像新接口(…)这样的表达式……)


您可以看一下即兴界面。允许使用duck输入接口包装任何对象。


没有标准的语言语法。要动态创建IInterface的实现,您可以使用反射、发射和可能涉及泛型和/或Action<...>/Func<...>(带或不带Expression),但这是一项非常重要的工作。

本质上,这就是许多模拟框架所做的。也许看看他们。


1
2
3
4
5
6
7
private void CleanUp(Func<string> obj){
  Console.WriteLine("str from delegate" + obj.Invoke());
}

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