我有一组所谓的流畅接口,所以我可以使用如下语法:
a.With("abc").Do("this").Then("that);
每个方法都返回一个转换为相应接口的对象。在设计时,我可以使用 Intellisense 在 API 方法之间轻松导航。但是,如果我将其中一个参数转换为动态,我将无法再这样做:
a.With((动态)"abc").Do("this").Then("that);
不仅我在设计时失去了 Intellisense,这种转换还会影响运行时执行:在 With 返回动态类型的对象之后的所有后续调用都可能破坏执行逻辑。
我不明白为什么动态参数会影响只使用静态类型的合约。如果一个方法With被设计为返回一个ISomeInterface的实例并且实现返回SomeClass(即实现了ISomeInterface),为什么一个在不相关的地方使用的动态对象会感染所有后续的调用链?有什么办法可以预防吗?