基于Interface的匿名类型

Bha*_*kar 5 c#

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

delegate() { // type impl here , but not implementing any interface}
Run Code Online (Sandbox Code Playgroud)

有点像的东西

new IInterface() { // interface methods impl here }
Run Code Online (Sandbox Code Playgroud)

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

例如,考虑这样:

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

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

    delegate string GetString();
Run Code Online (Sandbox Code Playgroud)

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

Kal*_*ier 5

你可以看一下即兴界面.允许您使用Duck Typing Interface包装任何对象.


Mar*_*ell 3

没有标准的语言语法。要动态创建一个实现,您可以使用 Reflection.Emit ,也许还涉及泛型和/或/ (有或没有),但这是一项不小的工作量。IInterfaceAction<...>Func<...>Expression

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