Пока я согласен с другими ответами, что в большинстве случаев это, безусловно, имеет смысл.
Иногда вам может потребоваться немного больше гибкости, определив интерфейс и реализовав его с помощью методов экземпляра. Это дает вам возможность использовать разные методы в вашем коде в будущем.
Вот пример того, что я имею в виду. Допустим, вы используете этот ваш 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
, являющегося статическим служебным классом, это будет просто одна реализация класса, который предлагает способ форматирования определенного типа объекта (в вашем случае string
объектов; в моем примере это воображаемые DataField
объекты).
Так что это очень длинный способ сказать, это зависит от обстоятельств. Если вы стремитесь к сверхгибкости в будущем, возможно вам следует подумать о реализации интерфейса вместо использования статического вспомогательного класса.
Обратите внимание, что в моем примере выше другим вполне приемлемым способом решения проблемы могло бы стать принятие Func<T, string>
делегата вместо этого гипотетического IFormatter<T>
интерфейса. На мой взгляд, это в основном стилистический выбор. Но часто интерфейсы становятся более реалистичными, когда вы хотите настроить несколько вариантов поведения; то есть определение методов, которые принимают 3, 4 или более делегатов, может быстро стать громоздким по сравнению с принятием одного интерфейса.
person
Dan Tao
schedule
10.02.2011
inputString
) - person Kirk Woll   schedule 11.02.2011FormatString
), если вы следуете соглашениям о кодировании .NET: - ›msdn.microsoft.com/en-us/library/ms229045.aspx - person Pandincus   schedule 11.02.2011