Wim*_*nen 17 c# duck-typing adapter
在看了Go如何处理界面并喜欢它之后,我开始考虑如何在C#中实现类似的鸭子类型:
var mallard = new Mallard(); // doesn't implement IDuck but has the right methods
IDuck duck = DuckTyper.Adapt<Mallard,IDuck>(mallard);
Run Code Online (Sandbox Code Playgroud)
该DuckTyper.Adapt方法将用于动态System.Reflection.Emit构建适配器.也许有人已经写过这样的东西了.我想它与模拟框架已经做的并没有太大的不同.
但是,如果Mallard实际上没有正确的IDuck方法,这将在运行时抛出异常.为了在编译时更早地得到错误,我必须编写一个MallardToDuckAdapter我正在努力避免的错误.
有没有更好的办法?
编辑:显然,我称之为"安全鸭子打字"的正确术语是结构打字.
Reflection.Emit用于发出直接调用原始对象的IL
我不认为这个库会给你编译时错误的想法,我不确定这是完全可行的.使用单元测试来帮助弥补这一点.
| 归档时间: |
|
| 查看次数: |
2114 次 |
| 最近记录: |