匿名类型基于接口

10 浏览
0 Comments

匿名类型基于接口

这个问题已经在这里得到了答案

匿名类可以实现接口吗?

我可以创建接口的匿名实现,与

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允许类似new Interface()这样的表达式...)

admin 更改状态以发布 2023年5月23日
0
0 Comments

目前没有标准语言语法来实现这个功能。如果要动态创建IInterface的实现,可以使用Reflection.Emit和一些涉及泛型和/或Action<...> / Func<...>(带或不带Expression)的技术,但这是一项非常繁琐的工作。

基本上,这就是许多模拟框架所做的事情。或许可以借鉴它们的做法。

0
0 Comments

您可以查看 impromptu-interface。它允许您使用鸭子类型接口包装任何对象。

0