Re: наследование Employee : Person
От: Poul_Ko Казахстан  
Дата: 02.11.12 02:40
Оценка: 2 (1) +1
Здравствуйте, Crauberg, Вы писали:

C>
------------------------------------ 8< ------------------------------------
C>// один и тот же человек, два сотрудника в разных конторах
C>employee1 = ...
C>employee2 = ...

C>person1 = (NaturalPerson)employee1 
C>person2 = (NaturalPerson)employee2

C>if (person1 == person2) // True или false?
C>if (employee1 == employee2) // True или false?

C>// добиваем:
C>if (person1 == employee2) // True или false?
C>------------------------------------ 8< ------------------------------------
C>//а теперь контрольный:
C>if (object.Equals(person1, person2))

C>// или, в словарик с ключом типа NaturalPerson добавлен employee1
C>if (someDictionaryByPerson.ContainsKey(employee2))
C>// ------------------------------------ 8< ------------------------------------


Мне кажется, что как только вы ответите на все эти вопросы ("True или false?" и т.д.) сразу станет очевидным, мешает ли наследование <b>в вашей задаче<b>.
Другими словами, правильного решения самого по себе не существует, рассматривать нужно всегда в контексте задачи. Где-то лучше окажется наследование, где-то — агрегирование.

C>Подумал: а не переписать ли с использованием explicit operator (I)NaturalPerson, дабы не сильно ломать то, что есть, и включить в состав Employee весь Person. Т.е.:

C>
public class Employee  : IEmployee
{
 public static exlicit operator /*I*/NaturalPerson(Employee e) { return e.Person; }
C>}


Есть ещё вариант с реализацией интерфейса:
public interface IEmployee  : IPerson {}
// или
public class Employee  : IEmployee, IPerson {}

Это лучше отражает связь между работником и человеком: работник это не специальный подвид человека, он просто может рассматриваться как человек.
Но повторюсь ещё раз — вне контекста задачи подобные размышления ничего не значат.
Brainbench transcript #6370594
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.