我刚刚阅读了Krzysztof Cwalina和Brad Abrams的框架设计指南第二版中关于扩展成员的部分,并没有找到这样的例子.我的问题涉及F#库中的超类和子类,但我希望答案与所有.NET语言相关.
F#有两种类型,super类型Expr和sub类型Expr<'a>,后者只是前者的类型化版本的包装器.这些是用于引用表达式的类型.
如果我想在这些类型上定义扩展方法以进行评估,那么这将是一个更好的设计:
EvalUntyped() : Expr -> obj上Expr和Eval() : Expr<'a> -> 'a上Expr<'a>.Eval() : Expr -> obj在Expr与Eval() : Expr<'a> -> 'a上Expr<'a>.第二个选项对我来说似乎更正确,但是我想遵循可能存在的任何设计准则:是否有任何权威优先权(假设它们在PowerPack中"错误")?