传递动态参数会破坏流畅的接口

时间:2012-11-14 18:09:37

标签: c#-4.0 dynamic fluent

我有一组所谓的流畅接口,所以我可以使用这样的语法:

a.With( “ABC”)执行( “这”)则(“即);

每个方法都返回一个对象转换为相应的接口。在设计时,我可以使用Intellisense轻松地在API方法之间导航。但是,如果我将其中一个参数转换为动态,我就不能再这样做了:

a.With((动态) “ABC”)执行( “这”)则(“即);

不仅我在设计时失去了Intellisense,这个强制转换会影响运行时执行:所有后续调用返回动态类型的返回对象可能会破坏执行逻辑。

我无法理解为什么动态参数会影响仅使用静态类型的契约。如果方法With被设计为返回ISomeInterface的实例并且实现返回SomeClass(实现ISomeInterface),为什么在不相关的地方使用的动态对象会感染所有后续的调用链?有什么办法可以阻止吗?

1 个答案:

答案 0 :(得分:0)

我相信Erik Lippert的这篇文章全部回答:

http://blogs.msdn.com/b/ericlippert/archive/2012/10/22/a-method-group-of-one.aspx