适当使用静态方法

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(使用前将#替换为@)

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

  • 高级 Win32 图像文件 I/O?

    我想在 Windows C 应用程序中将图像文件读入内存 什么是一个相当简单的解决方案 也许类似于 IOS 提供的UIImage 我希望支持合理数量的文件格式 我需要为图像处理的位图提供一些低级访问权限 我在互联网上阅读了很多内容 看起来
  • 如何向 UWP 项目添加 .NET dll 引用?

    我有几个适用于 NETv4 x 的 NET dll 项目 我将版本更改为 4 6 1 并重新构建 没有出现问题 当我尝试从 UWP 项目向它们添加引用时 出现错误 项目的目标是 NETCore 而文件引用的目标是 NET框架 这不是受支持的
  • 如何在 C# 事件中区分更改是由代码还是由用户进行?

    我有一个简单的TextBox一开始是空的 我有一个简单的事件 TextChanged 可以知道用户何时更改了其中的任何内容TextBox 但是 如果我自己在代码中对其执行任何操作 该事件就会触发 喜欢设置textbox Text Test
  • 处理 LINQ sum 表达式中的 null

    我正在使用 LINQ 查询来查找列的总和 并且在少数情况下该值有可能为空 我现在使用的查询是 int score dbContext domainmaps Where p gt p SchoolId schoolid Sum v gt v
  • 在 Windows Phone 上启动 pdf 文件时出现 System.Runtime.InteropServices.COMException

    我正在尝试使用我之前在另一个应用程序上使用过的以下工作代码打开 pdf 文件 但这一次 当流程到达此行时 我收到 System Runtime InteropServices COMException Windows System Laun
  • 我应该在单元测试中使用 AutoMapper 吗?

    我正在为 ASP NET MVC 控制器方法编写单元测试 这些控制器依赖于IMapper 我创建的用于抽象 AutoMapper 的接口 使用 Castle Windsor 通过构造函数注入传入 动作方法使用IMapper从领域对象映射到
  • 使用 C# 使用应用程序密码登录 Office 365 SMTP

    在我们的 Office 365 公司帐户中实施两步身份验证之前 我的 C WPF 程序已成功进行身份验证并发送邮件 我使用了 SmtpClient 库 但现在我必须找到另一个解决方案 因为它不再起作用 我找不到任何使用 O365 应用程序密
  • 组合 Datepicker 和 Timepicker 值 Win 8.1

    我试图同时使用 Datepicker Timepicker 来返回可以存储在数据库中的 DateTime 例如 我想要安排会议的开始日期和结束日期 如果适用 我将如何将这些值组合成 SQL 数据库可以处理的正确格式 任何反馈都会很棒 我让这
  • C中有const吗?

    这个问题可能很幼稚 但是 有没有constC 中的关键字 从哪个版本开始 之间有任何语义和 或句法差异吗const在 C 和 C 中 C 和 C 之间在语法上没有差异const关键字 除了一个相当晦涩的关键字 在 C 中 自 C99 起 您
  • 根据拦截和返回值自动重试客户端WCF调用

    是否可以拦截 WCF 调用的结果并重试该操作 例如 操作的返回值可能包含状态代码 指示我传递到原始调用的会话令牌已过期 在这种情况下 我可以检索新的会话令牌并使用新的会话令牌重试调用 是否可以通过使用 WCF 拦截返回值 检查它 然后以对操
  • C#:使用 System.Text 和 System.Text.RegularExpressions 之间的区别

    在 ASP NET C 应用程序中 我注意到为了使用 Regex 和 StringBuilder 我必须将两者都放在 using System Text using System Text RegularExpressions 从简单的角度
  • C#:如何使用 SHOpenFolderAndSelectItems [重复]

    这个问题在这里已经有答案了 有人可以举例说明如何使用 shell 函数吗SH打开文件夹并选择项目 http msdn microsoft com en us library bb762232 VS 85 aspx来自 C 我不太明白如何使用
  • C++ Primer 5th Edition 错误 bool 值没有指定最小大小?

    bool 的最小大小不应该是 1 个字节吗 这有点学术性的东西 尽管它们会转换为数字 并且 与其他所有事物一样 它们最终将基本上由计算机内存中的数字表示 但布尔值不是数字 你的bool可以取值true 或值false 即使您确实需要至少 1
  • 如何使用 Clang 查找内存泄漏

    我在我的机器 ubuntu 中安装了 Clang 以便发现我的 C 代码中的内存泄漏 我编写了一个示例代码来检查它的工作情况 如下所示 File hello c for leak detection include
  • 为什么我不能在扩展 List 的类中调用 OrderBy?

    我有一堂课 Deck 其中包含一个名为的方法Shuffle 我正在致力于重构Deck延长List
  • 从 C# 中的 .NET SecureString 读取单个字符?

    WPF 的PasswordBox 返回一个SecureString 它对窥探者隐藏密码 问题是你最终必须获得密码的值 而我在网上找到的建议都涉及将值复制到字符串中 这会让你回到窥探者的问题 IntPtr bstr Marshal Secur
  • Windows 上 libcurl 的静态库[重复]

    这个问题在这里已经有答案了 如何将此库 libcurl 静态链接到 exe 我努力了 disable share enable static 没有帮助 我使用的是MingW32 有没有一种简单的方法来静态链接这个库 这样我的应用程序就不再有
  • ASP.NET Core:会话 ID 始终变化

    今天启动了一个全新的 ASP NET Core 网站 按照说明添加会话 我们在索引页上打印出会话 ID 它始终是唯一的 我认为这可能是 cookie 合规性 所以我在 Chrome 的高级设置和调试器中删除了所有 cookie 但横幅不会再
  • 当我读取 500MB FileStream 时出现 OutOfMemoryException

    我使用 Filestream 读取大文件 gt 500 MB 但出现 OutOfMemoryException 任何有关它的解决方案 我的代码是 using var fs3 new FileStream filePath2 FileMode
  • 在 C# 中读取/写入命令行程序

    我正在尝试与 C 的命令行程序进行对话 它是一个情绪分析器 它的工作原理如下 CMD gt java jar analyser jar gt Starting analyser 这是我想从我的 C 程序插入内容的地方 例如 I love y

随机推荐

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

    我一直听说 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