gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 03:08:38 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com