适当使用静态方法

2024-04-30

从概念上讲,当方法仅接受输入并将输入重新格式化为输出时,使用静态方法 (C#) 是否合适?例如:

public static string FormatString(string inputString){
  return "some formatting" + inputString + "Some other formatting";
}

如果我有一些这些类型的方法,静态“实用程序”类是个好主意吗?


到目前为止,我同意其他答案,因为它在很多时候确实有意义。

有时,您可能实际上想通过定义接口并使用实例方法实现它来给自己更多的灵活性。这使您可以选择使用不同的代码中的方法。

这是我的意思的一个例子。假设你正在使用这个formatString你的方法在某些地方的代码看起来像这样:

public void DumpToConsole()
{
    foreach (DataField field in m_fields)
    {
        Console.WriteLine(StringUtils.formatString(field.ToString()));
    }
}

好的,这太棒了。 (实际上,这很愚蠢,但无论如何 - 仅用于说明!)但是您可以通过让它接受界面,其中您可能有各种实现,它们提供完全不同类型的格式:

public void DumpToConsole(IFormatter<DataField> formatter = null)
{
    // Perhaps you could specify a default. Up to you.
    formatter = formatter ?? Formatter<DataField>.Default;

    foreach (DataField field in m_fields)
    {
        Console.WriteLine(formatter.Format(field));
    }
}

然后代替StringUtils作为一个静态实用程序类,它只是one提供一种格式化某种类型对象的方法的类的实现(在您的情况下,string物体;在我的例子中,这些想象的DataField对象)。

所以这都是一种非常冗长的说法,这取决于情况。如果您的目标是未来获得超级灵活性,maybe您应该考虑实现一个接口,而不是使用静态帮助器类。

请注意,在我上面的示例中,解决问题的另一种完全可接受的方法可能是接受Func<T, string>代表而不是这个假设IFormatter<T>界面。在我看来,这主要是一种风格选择。但当您想要自定义多种行为时,界面通常会变得更加现实;也就是说,与接受单个接口相比,定义接受 3 个、4 个或更多委托的方法很快就会变得很麻烦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

适当使用静态方法 的相关文章

  • 每个托管线程是否都有自己对应的本机线程?

    我想知道是否在 Net 中创建托管线程 通过调用Thread Start 导致在后台创建一个本机线程 那么托管线程是否有对应的本机线程呢 如果是 当托管线程等待或睡眠时 是否意味着相应的本机线程也在等待或睡眠 是的 NET 线程映射到所有当
  • 为什么 int8_t 和用户通过 cin 输入显示奇怪的结果[重复]

    这个问题在这里已经有答案了 一小段代码让我发疯 但希望你能阻止我跳出窗外 看这里 include
  • ClickOnce 应用程序错误:部署和应用程序没有匹配的安全区域

    我在 IE 中使用 FireFox 和 Chrome 的 ClickOnce 应用程序时遇到问题 它工作正常 异常的详细信息是 PLATFORM VERSION INFO Windows 6 1 7600 0 Win32NT Common
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • 在 LINQ 中按 Id 连接多表和分组

    我想按categoryId显示列表产品的名称组 这是我的代码 我想要我的视图显示结果 Desktop PC HP Red PC Dell Yellow PC Asus Red SmartPhone Lumia 720 Blue 我的组模型
  • 错误:表达式不产生值

    我尝试将以下 C 代码转换为 VB NET 但在编译代码时出现 表达式不产生值 错误 C Code return Fluently Configure Mappings m gt m FluentMappings AddFromAssemb
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 如何区分用户点击链接和页面自动重定向?

    拥有 C WebBrowser control http msdn microsoft com en us library system windows forms webbrowser aspx在我的 WinForms 应用程序中 并意识
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 在一个平台上,对于所有数据类型,所有数据指针的大小是否相同? [复制]

    这个问题在这里已经有答案了 Are char int long 甚至long long 大小相同 在给定平台上 不能保证它们的大小相同 尽管在我有使用经验的平台上它们通常是相同的 C 2011 在线草稿 http www open std
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • 使用管道时,如果子进程数量大于处理器数量,进程是否会被阻塞?

    当子进程数量很大时 我的程序停止运行 我不知道问题是什么 但我猜子进程在运行时以某种方式被阻止 下面是该程序的主要工作流程 void function int process num int i initial variables for
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com
  • 当我使用 OpenSSL1.1.0g 根据固定的 p 和 g 值创建 Diffie Hellman 密钥协议密钥时,应该执行哪些检查?

    您好 我尝试通过这段代码使用修复 p 和 g 参数来制作 Diffie Hellman Keysanswer https stackoverflow com a 54538811 4706711 include

随机推荐

  • 懒惰评估不那么懒惰吗?

    我一直听说 C 使用惰性求值 所以对于某些代码 比如if true DoExpensiveOperation 将返回true不执行DoExpensiveOperation 在面试测试中我看到了以下问题 static bool WriteIf
  • 在PC上的Firefox上模拟Android的Webview?

    作为我的软件开发工作 针对 Android 的一部分 我需要在通过 Android 的 WebView 查看时检查大量 HTML 页面的内容 到目前为止 我已经能够通过将 HTML 内容转储到文件中来实现这一点 data data
  • 在链接服务器上执行 SP 并将其放入临时表中

    需要有关以下问题的一些帮助 Case 1 存储过程位于服务器 1 上 调用来自服务器 1 declare tempCountry table countryname char 50 insert into tempCountry exec
  • AspectJ - 接口实现方法的切入点

    我有 SomeInterface 的几个实现 问题是 在 SomeInterface 的所有实现中 executeSomething 方法的切入点是什么 public class SomeImplementation implements
  • 为什么 mongoDB 节点驱动程序会创建不需要的连接?

    当我尝试使用版本 3 6 0 中的 mongodb Nodejs 本机驱动程序建立与数据库的单个 mongodb 连接时 遇到了一种奇怪的问题 我的想法是在所有客户端会话中只打开一个连接 并在我的 Express 服务器中的不同路由中重用它
  • 是否可以在 Android 或 Blackberry 上运行小程序?

    Java站点是这样的java com http www java com says KVM 移动设备的虚拟机 与 JVM Java 虚拟机 相对应 它用于在移动设备上运行用 Java 技术编写的小程序和应用程序 KVM 必须由制造商安装 它
  • TypeScript 出现错误 TS2304:找不到名称“require”

    我正在尝试启动并运行我的第一个 TypeScript 和 DefinelyTyped Node js 应用程序 但遇到了一些错误 当我尝试转译简单的 TypeScript Node js 页面时 收到错误 TS2304 找不到名称 requ
  • 如何在可组合项中使用 hilt 注入单例

    我正在尝试注入一个在可组合项内的 hiltmodule 中定义的单例类 我知道如何注入视图模型 但是单例类呢 Inject lateinit var mysingleton MySingletonClass 该代码在活动中运行良好 但将其从
  • Protractor e2e 测试登录重定向

    目前有部分端到端测试 输入用户名 密码并单击 登录 它成功完成了这一操作 但在 谢谢您已登录 页面结束 而不是像我通过浏览器登录那样被重定向到 帐户门户 或 仪表板 这个项目是新的 但我们正在使用 OAuth 主要问题 这听起来像是需要 h
  • 将 NodeJS Rest 服务与 wso2 集成

    我的其余 Web 服务都是用 Nodejs 编写的 我想为这些 API 实现基于角色的 管理员 用户 超级管理员等 授权 如何将 wso2 与 NodeJS 一起使用 您可以使用 WSO2 API Manager 来实现此目的 这是一篇不错
  • Swagger @ApiOperation 可以允许在 Java 中指定列表的列表吗?

    我在 Java 类中有一个方法 其签名如下所示 我想为其添加 Swagger Rest 文档 public List
  • 在 pandas 中重新采样

    我在另一个话题上问了一个问题Link https stackoverflow com questions 33446776 how to resample starting from the first element in pandas
  • 无法在 odoo 10 Windows 中执行命令 lessc

    我想问一下在windows上安装odoo 10的问题 我有这样的错误 无法执行命令 lessc 我在另一篇文章中看到过这个问题 但他们的文章只是讨论 mac 和 ubuntu 服务器 而不是在 Windows 中 任何人都可以帮我解决这个
  • 在 ios 应用程序中将 UIImagePickerController 锁定为纵向模式

    在我的 IOS 应用程序中 当我打开相机时 我已将图像放置在相机视图上 在肖像模式下看起来不错 但当它变成横向模式时 看起来就有些奇怪了 所以我想锁定UIImagePickerController在肖像模式下 以下是我的 ui 图像选择器控
  • 数据库中的编码 HTML 返回页面

    我在数据库中有以下编码 lt p gt Content lt span style quot color ffffff quot gt lt span style quot background color ff0000 quot gt 1
  • Froala 添加自定义预编码按钮

    我正在尝试创建一个代码按钮Froala http editor froala com 编辑器基本上可以通过按执行与此处相同的操作CNTRL K 现在我想我有两个选择 第一个是编辑 froala editor js 文件 因为 Froala
  • 在 macOS 10.12 上绑定到套接字时出现 NSPOSIXErrorDomain

    我正在玩CocoaAsyncSocket https github com robbiehanson CocoaAsyncSocket在 Swift 中绑定到 UDP 套接字并通过本地网络接收消息 我正在初始化一个套接字 并尝试绑定到一个端
  • PHP 包含语义

    我正在尝试找出如何解释PHP s include构造 http www php net manual en function include php 例如是否是文本包含 何时评估等 像往常一样 文档相当非正式和模糊 根据实验 它似乎是语法糖
  • 如何为 CSS 规则选择元素的曾孙?

    给定这个 HTML 我该如何选择rt block改变CSS仅当嵌套在 rt header 中时如图所示 div div class rt container div class rt grid 6 rt alpha div class rt
  • 适当使用静态方法

    从概念上讲 当方法仅接受输入并将输入重新格式化为输出时 使用静态方法 C 是否合适 例如 public static string FormatString string inputString return some formatting