从概念上讲,如果静态方法 (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/