扩展方法设计指南:对于sub和super类,类似的方法名称应该是相同的吗?

Ste*_*sen 5 .net f#

我刚刚阅读了Krzysztof Cwalina和Brad Abrams的框架设计指南第二版中关于扩展成员的部分,并没有找到这样的例子.我的问题涉及F#库中的超类和子类,但我希望答案与所有​​.NET语言相关.

F#有两种类型,super类型Expr和sub类型Expr<'a>,后者只是前者的类型化版本的包装器.这些是用于引用表达式的类型.

如果我想在这些类型上定义扩展方法以进行评估,那么这将是一个更好的设计:

  1. 不要作为F#PowerPack中确实并确定具有不同名称的方法EvalUntyped() : Expr -> objExprEval() : Expr<'a> -> 'aExpr<'a>.
  2. 如果您拥有类型并使用相同的名称(可以将超类型上的方法视为虚拟,并且子类型上的方法可以被认为是覆盖超级虚方法),那么做更接近您将要做的事情).即Eval() : Expr -> objExprEval() : Expr<'a> -> 'aExpr<'a>.

第二个选项对我来说似乎更正确,但是我想遵循可能存在的任何设计准则:是否有任何权威优先权(假设它们在PowerPack中"错误")?