【发布时间】:2013-08-10 15:39:45
【问题描述】:
我经常发现仅仅因为某个方法调用需要它一次就必须实现一个接口会让人分心。我必须在其他地方创建一个类,实现接口等。
Java 有一个名为Anonymous Classes 的特性,它允许实现“内联”接口。因此,我的问题是:您能想到的使用现有语法在 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# 的火焰大战。
【问题讨论】:
-
I often find it quite a distraction to have to implement an interface just because I need it once for some method call.- 使用Delegates。这就是 C# 与 java 的区别。 -
你发现自己经常这样做吗?
-
不,时不时地,在编写单元测试时可能更是如此。我意识到这不一定是好的做法,但我主要是好奇。
-
“我的问题不在于 Java 的匿名类与 C# 委托。”我的答案也不是。但如果你不想听,那我也没关系。
-
嗯,ImpromptuInterface 有你确切的 POC 语法,只需将
Implement.Interface换成Impromptu.ActLike以便IFoobar foo = Impromptu.ActLike<IFoobar>(new { Foobar = new Func<String, Boolean>(s => s == "foobar") });