Estoy de acuerdo con las otras respuestas hasta el momento que sin duda tiene sentido la mayor parte del tiempo.
A veces,, es posible que desee darse un poco más de flexibilidad mediante la definición de una interfaz y su implementación con los métodos de instancia. Esto le da la opción de usar métodos diferentes en su código más adelante.
Aquí hay un ejemplo de lo que quiero decir. Digamos que usted está usando este método formatString
de los suyos en algún código en alguna parte que se ve así:
public void DumpToConsole()
{
foreach (DataField field in m_fields)
{
Console.WriteLine(StringUtils.formatString(field.ToString()));
}
}
OK, esto es muy bueno. (En realidad, es estúpido, pero lo que sea -¡sólo para ilustración!) Pero podría hacer que ese método sea más flexible al aceptar una interfaz , de la que puede tener varias implementaciones que proporcionan tipos completamente diferentes de formateo:
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));
}
}
Entonces, en lugar de StringUtils
ser una clase de utilidad estática, sería meramente uno implementación de una clase que ofrece una manera de dar formato a un determinado tipo de objeto (en su caso, string
objetos; en mi ejemplo, éstos imaginaria DataField
objetos).
Así que esta es una manera muy larga de decir que depende. Si está buscando una súper flexibilidad en el futuro, quizás, debería considerar implementar una interfaz en lugar de ir con una clase de ayuda estática.
Ten en cuenta que en el ejemplo anterior, otra forma completamente aceptable de abordar el problema podría haber sido aceptar un delegado Func<T, string>
en lugar de esta hipotética interfaz IFormatter<T>
. Esto es principalmente una elección de estilo, en mi opinión. Pero a menudo las interfaces se vuelven más realistas cuando hay múltiples comportamientos que desea personalizar; es decir, la definición de métodos que aceptan 3, 4 o más delegados puede volverse engorrosa rápidamente en comparación con la aceptación de una sola interfaz.
FYI: los parámetros del método deben comenzar con una letra minúscula. (es decir, 'inputString') –
Los nombres de los métodos realmente deberían comenzar con una letra mayúscula, si usted quiere seguir las reglas estándar de C#; –
Y los nombres de los métodos deben comenzar con una letra mayúscula (es decir,' FormatString'), asumiendo sigue las convenciones de codificación de .NET: -> http://msdn.microsoft.com/en-us/library/ms229045.aspx – Pandincus