我经常发现,仅仅因为我需要一次接口(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/