Вспомогательные методы в C #: статические или нестатические?

У меня есть класс с некоторыми функциями, которые на самом деле являются просто «вспомогательными» методами, которые клиентский код может делать сам с другими свойствами / методами общедоступных средств доступа, и я не знаю, следует ли мне определять их как свойства с помощью метода get, экземпляра методы или статические методы, которые принимают экземпляр в качестве параметра. Кроме того, у меня также есть интерфейс, извлеченный из класса, который используется почти везде, кроме конструирования, чтобы мой код мог использовать любой класс, реализованный для интерфейса.

Вопрос в том, что лучше с точки зрения дизайна? Например, как средство получения начального значения из этого класса:

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);
  }
}

Свойство поддается более короткому, более читаемому клиентскому коду, но потребует от любого, кто использует IPerson, написать свою собственную реализацию, как и метод экземпляра.

Статический метод будет означать, что реализации классов не нужно будет писать свои собственные, и мой код может гарантировать, что начальная буква определяется на основе имени, но это означает, что она не может быть в интерфейсе, а клиентский код немного более многословен. ,

Это просто сводится к тому, не является ли хорошей идеей позволить классам реализации указывать, как вычисляются вспомогательные методы?

РЕДАКТИРОВАТЬ: незначительно в стороне, почему бы не позволить мне добавить тег передовой практики?

Ответы на вопрос(2)

Ваш ответ на вопрос