gpt4 book ai didi

.net - 扩展方法设计指南 : should a like method name be the same for the sub and super class?

转载 作者:行者123 更新时间:2023-12-02 17:57:10 25 4
gpt4 key购买 nike

我刚刚读完 Krzysztof Cwalina 和 Brad Abrams 所著的《框架设计指南》第二版中有关扩展成员的部分,但没有找到这方面的示例。我的问题涉及 F# 库中的父类(super class)和子类,但我希望答案与所有​​ .NET 语言相关。

F# 有两种类型,父类(super class)型 Expr和子类型 Expr<'a>其中后者只是前者的类型化版本的包装。这些是用于引用表达式的类型。

如果我想在这些类型上定义扩展方法来评估它们,这将是一个更好的设计:

  1. 按照 F# PowerPack 的方式进行操作并使用不同名称定义方法 EvalUntyped() : Expr -> objExprEval() : Expr<'a> -> 'aExpr<'a> .
  2. 做一些更接近于您拥有这些类型并使用相同名称的操作(其中父类型上的方法可以被认为是虚拟的,而子类型上的方法可以被认为是重写超虚方法)。即Eval() : Expr -> objExprEval() : Expr<'a> -> 'aExpr<'a> .

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

最佳答案

这个问题可能没有明确的答案。然而,除非您真的相信 F# PowerPack 的设计确实“错误”,否则我会遵循他们的风格,原因有两个:

  1. 保持风格与其他开发人员在 F# 和官方扩展中已经使用的风格一致。
  2. 为了更明确地显示这两种方法的返回类型的差异,因为它确实很重要。

您在回复 Tomas 时的类比是一个很好的类比,但我认为使用此代码的任何其他开发人员可能不会像您那样关注设计。最好与官方风格保持一致并明确表达您的意图。

关于.net - 扩展方法设计指南 : should a like method name be the same for the sub and super class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6565634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com