在看了Go如何处理接口并喜欢它之后,我开始思考如何在 C# 中实现类似的鸭子类型,如下所示:
var mallard = new Mallard(); // doesn't implement IDuck but has the right methods
IDuck duck = DuckTyper.Adapt<Mallard,IDuck>(mallard);
该DuckTyper.Adapt
方法将用于System.Reflection.Emit
动态构建适配器。也许有人已经写过这样的东西。我想这与模拟框架已经做的并没有太大的不同。
Mallard
但是,如果实际上没有正确的IDuck
方法,这将在运行时引发异常。为了在编译时更早地得到错误,我必须写一个MallardToDuckAdapter
这正是我想要避免的。
有没有更好的办法?
编辑:显然,我称之为“安全鸭式打字”的恰当术语是结构打字。