Métodos auxiliares em C #: estático ou não estático?

Eu tenho uma classe com algumas funções que, realisticamente, são apenas métodos 'auxiliares' que o código do cliente poderia fazer com outras propriedades / métodos do acessador público, e não sei se devo defini-las como propriedades com um getter, instância métodos ou métodos estáticos que tomam a instância como um parâmetro. Além disso, também tenho uma interface extraída da classe que é usada praticamente em todos os lugares, exceto na construção, para permitir que meu código use qualquer classe implementada na interface.

A questão é: qual é o melhor do ponto de vista do design? Por exemplo, como um meio de obter a inicial dessa classe:

class Person : IPerson {
  private string name;

  public string Name { get { return this.name; } }

  // Property with getter
  public string Initial { get { return this.name.Substring(0,1); } }

  // Instance method
  public string GetInitial { return this.name.Substring(0,1); }

  // Static method
  public static string GetInitial(IPerson person) {
    return person.Name.Substring(0,1);
  }
}

A propriedade se presta a um código de cliente mais curto e legível, mas exigiria que qualquer pessoa que implementasse o IPerson gravasse sua própria implementação, como faria o método da instância.

O método estático significaria que a implementação de classes não precisaria escrever por conta própria, e meu código pode garantir como a inicial é determinada com base no nome, mas significa que não pode estar na interface e o código do cliente é um pouco mais detalhado .

Apenas se resume a não ser uma boa ideia permitir que as classes de implementação especifiquem como os métodos auxiliares são calculados?

EDIT: Por outro lado, por que SO não me permite adicionar a tag de práticas recomendadas?

questionAnswers(2)

yourAnswerToTheQuestion