我经常觉得需要实现一个接口很分散注意力,因为我只需要它来调用某个方法一次。我必须在其他地方创建一个类,实现接口等等。
Java有一个名为匿名类的功能,允许我们在“内联”实现接口。我的问题是:你能想到使用现有语法在C#中实现类似功能的最好方式是什么(我意识到"最好"是主观的)?我寻找漂亮的语法,不一定是性能。
我在C#中编写了以下内容作为POC:
给定
interface IFoobar
{
Boolean Foobar(String s);
}
IFoobar foo = Implement.Interface<IFoobar>(new {
Foobar = new Func<String, Boolean>(s => s == "foobar")
});
这里使用了一个匿名对象和反射/发射来实现IFoobar
接口(忽略属性、泛型方法和重载)。但是,我不喜欢new Func<...>
的语法,但却离不开它。
我发现一个叫做Impromptu Interface的库,但对其支持方法的语法并不印象深刻。
有没有更好的方法呢?
编辑:我不想看到Java与C#之间的争吵。
委托
可以解决这个问题,这也是C#和Java之间的区别所在。 - Federico BerasateguiImplement.Interface
替换为Impromptu.ActLike
,这样IFoobar foo = Impromptu.ActLike<IFoobar>(new { Foobar = new Func<String, Boolean>(s => s == "foobar") });
就可以了。 - jbtuleReturn<bool>.Arguments<string>
太好了,可以使用public static class Return<TR> { public static Func<T1,TR> Arguments<T1>(Func<T1,TR> del) { return del; }}
来强制转换为一个Func<string, bool>
。 - jbtule