Я пытаюсь выбрать одну из трех разных реализаций.
У меня есть интерфейс IPerson, все типы людей (например, сотрудник полиции, студент, юрист) реализуют это.У каждого типа человека должен быть свой адрес (например, дом, офис, почта).Это местоположение никогда не меняется, поэтому оно может быть статическим / только для чтения.Люди обрабатываются в общем, поэтому мой метод сохранения SavePerson (человек IPerson) берет все, что наследуется от интерфейса IPerson, а у меня есть метод LoadPerson (int ID), который принимает идентификатор.
Моим первоначальным решением было добавить свойство DefaultLocation в IPerson и иметь только геттер.Таким образом, я могу использовать общие методы для сохранения данных.Проблема возникает, когда я пытаюсь загрузить данные, так как у меня еще нет экземпляра класса, поэтому я не могу ссылаться на свойство.
С другой стороны, я могу создать открытое статическое свойство только для чтения DefaultLocation для каждогоиз моих людей типа.В этом случае я могу вызвать Student.DefaultLocation и передать это в метод, загружающий мои данные.
Каким путем я должен идти и почему?У обоих, похоже, есть свои плюсы и минусы.
Когда я набирал этот вопрос, ко мне пришел третий вариант: что, если бы я использовал общедоступный статический объект readonly, на который можно ссылаться без создания экземпляра класса, а затем использовалпубличное свойство без установщика, которое может быть вызвано из универсальных методов?
По совету Джона я пошел:
public interface IPerson
{
LocationType DefaultLocation { get; }
}
public class PoliceOfficer : IPerson
{
public static readonly LocationType _DefaultLocationType = LocationType.Office;
public LocationType { get { return _DefaultLocationType; } }
}