c# - 在 C# 中动态实现接口(interface)的最佳方式是什么?

标签 c# dynamic interface

我经常发现,仅仅因为我需要一次接口(interface)来调用某个方法就必须实现一个接口(interface)是一件很让人分心的事情。我必须在其他地方创建一个类,实现接口(interface)等等。

Java 有一个特性叫做 Anonymous Classes这允许一个人实现接口(interface)“内联”。因此,我的问题是:您能想到的使用现有语法在 C# 中完成类似事情的最好方法是什么(我意识到“最好”是主观的)。我正在寻找好的语法,不一定是性能。

我在 C# 中将以下内容作为 POC 实现:

给定

interface IFoobar
{
   Boolean Foobar(String s);
}

IFoobar foo = Implement.Interface<IFoobar>(new {
   Foobar = new Func<String, Boolean>(s => s == "foobar")
});

这使用匿名对象和一些反射/发射来实现 IFoobar接口(interface)(忽略属性、泛型方法和重载)。但是,我不喜欢 new Func<...>东西,但离不开。

环顾四周,我注意到一个名为 Impromptu Interface 的图书馆,但对其支持方法的语法并没有留下深刻印象。

有没有“更好”的方式?

编辑:我不是在寻找 Java 与 C# 的口水战。

最佳答案

您提到您不需要经常这样做,不关心性能,并且通常希望在单元测试期间这样做。为什么不使用模拟框架?

例如,使用 Moq图书馆为例:

public interface IFoobar {
   Boolean Foobar(String s);
}  

void Main() {
    var foo = new Mock<IFoobar>();
    foo.Setup(x => x.Foobar(It.IsAny<string>()))
       .Returns((string s) => s == "foobar");

    foo.Object.Foobar("notbar"); // false
    foo.Object.Foobar("foobar"); // true
}

关于c# - 在 C# 中动态实现接口(interface)的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18134270/

相关文章:

c# - 如何在运行时在 ASP.NET MVC 中创建强类型 View ?

c# - EF 和存储库模式

c# - 流流 = WriteableBitmap.PixelBuffer.AsStream() 丢失

c# - dynamic (C# 4) 和 var 有什么区别?

c# - 在 Entity Framework 4.0 中缓存 POCO 对象

c++ - 关于 DynamicArrayStack 的基本问题

dataframe - 修改go中Stringer接口(interface)中的一个默认值

c# - 如何将带有枚举的 VB.net 接口(interface)转换为 C#

c# - 安装 Windows 服务时的凭据

c# - WinRT - 从 IInputStream 一次读取一个字节,直到遇到特定字节