gpt4 book ai didi

c# - 在可以修改的类上使用扩展方法是否可以接受

转载 作者:太空狗 更新时间:2023-10-29 17:56:25 25 4
gpt4 key购买 nike

我最近一直在考虑使用扩展方法在我控制的类(即在同一个程序中并且我可以修改)上实现辅助实用程序的想法。其背后的基本原理是,很多时候,这些辅助实用程序用于非常特定的场景,不需要访问类的内部值。

例如,假设我有一个 StackExchange 类。它有像 PostQuestionSearchAnswerQuestion 这样的方法。

现在,如果我想手动计算我的声誉以确保 StackOverflow 没有欺骗我,该怎么办?我会按照以下方式实现:

int rep=0;
foreach(var post in StackExchangeInstance.MyPosts)
{
rep+=post.RepEarned;
}

我可以向 StackExchange 类添加一个方法,但它不需要任何内部结构,而且它仅在程序的一个或两个其他部分中使用。

现在想象一下,如果您有 10 或 20 个这些特定的辅助方法。在某些情况下肯定有用,但绝对不适用于一般情况。我的想法是改变类似

public static RepCalcHelpers
{
public static int CalcRep(StackExchange inst){ ... }
}

类似的东西

namespace Mynamespace.Extensions.RepCalculations
{
public static RepCalcExtensions
{
public static int CalcRep(this Stackexchange inst){...}
}
}

注意命名空间。理想情况下,我会使用它来对特定场景中的扩展方法进行分组。例如,“RepCalculations”、“Statistics”等。

我已经尝试搜索是否听说过这种类型的模式,但没有发现任何证据表明扩展方法被用于除您无法修改的类之外的任何东西。

这种“模式”有什么缺点呢?我应该坚持使用继承或组合,还是只使用一个好的 ol' static helper 类?

最佳答案

我会阅读关于扩展方法的框架设计指南部分。 Here是第 2 版作者之一的帖子。您正在描述的用例 (专门的辅助方法)被 Phil Haack 引用为扩展方法的有效用途,缺点是它需要额外的 API 知识才能找到那些“隐藏”方法。

那篇文章中没有提到,但书中推荐的是,扩展方法与扩展类进入一个单独的命名空间。否则,它们将始终随 intellisense 一起出现,并且无法将其关闭。

关于c# - 在可以修改的类上使用扩展方法是否可以接受,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14072945/

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