我可以用类似于
的方式创建接口的匿名实现delegate() { // type impl here , but not implementing any interface}
的内容
new IInterface() { // interface methods impl here }
我认为它们有用的情况是指定作为接口类型的方法参数,以及创建类类型的代码太多的代码。
例如,请考虑这样:
public void RunTest()
{
Cleanup(delegate() { return "hello from anonymous type"; });
}
private void Cleanup(GetString obj)
{
Console.WriteLine("str from delegate " + obj());
}
delegate string GetString();
如果在上面的代码中,Cleanup将接口作为参数,而不编写类定义,将如何实现? (我认为Java允许像新的Interface()...)
这样的表达式答案 0 :(得分:5)
您可以查看impromptu-interface。允许您使用Duck Typing Interface包装任何对象。
答案 1 :(得分:3)
没有标准的语言语法。要动态创建 IInterface
的实现,您可以使用Reflection.Emit,也可以使用涉及泛型的内容和/或Action<...>
/ Func<...>
(有或没有{ {1}}),但这是一项非常重要的工作。
基本上,这就是许多模拟框架所做的事情。或许看看他们。
答案 2 :(得分:0)
private void CleanUp(Func<string> obj){
Console.WriteLine("str from delegate " + obj.Invoke());
}
public void RunTest(){
Cleanup(() => "hello from anonymous type");
}