c# - 适当使用静态方法

标签 c# static static-methods oop

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

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

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

最佳答案

到目前为止,我同意其他答案,因为它在很多时候肯定是有道理的。

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

这是我的意思的一个例子。假设您在某处的某些代码中使用了您的 formatString 方法,如下所示:

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

好的,这很好。 (实际上,这很愚蠢,但不管怎样——仅供说明!)但是你可以通过让它接受一个接口(interface)来使这样的方法更灵活,你可能有各种实现来提供完全不同种类的格式:

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 不是一个静态实用程序类,它只是一个类的一个实现,它提供了一种格式化特定类型对象的方法(在你的例子中,是 string 对象;在我的例子中例如,这些虚构的 DataField 对象)。

所以这都是一种非常冗长的说法,这取决于。如果您的目标是在未来获得 super 灵 active ,也许您应该考虑实现一个接口(interface),而不是使用静态帮助器类。

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

关于c# - 适当使用静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4963920/

相关文章:

c#:继承/接口(interface)静态成员?

Java:静态字段在内存中的什么位置?

css - 静态定位和相对定位的区别

c# - 将方法定义为静态方法更好吗?

php - 错误 : Using $this when not in object context

android - 通过静态方法访问 SharedPreferences

javascript - C# Asp.net 必填字段验证器

c# - 如何从头开始创建模型

c# - 如何编码 cvMat 和 CV_MAT_ELEM

c# - Microsoft.Fakes 不会在正常的单元测试上下文中运行