Я пытаюсь найти лучший способ обработки производного класса, в котором также есть свойство, которое я хочу получить из другого класса.Позвольте мне показать вам упрощенные классы:
public abstract class AttendanceEvent
{
public int Id { get; set; }
public DateTime StartDateTime { get; set; }
public DateTime EndDateTime { get; set; }
public AttendanceCode AttendanceCode { get; set; }
}
public abstract class AttendanceCode
{
public int Id { get; set; }
public string Name { get; set; }
public string Code { get; set; }
public AttendanceType Type { get; set; }
}
Теперь я хотел бы иметь:
public class PublicAttendanceCode : AttendanceCode {}
public class PublicLeave : AttendanceEvent
{
// PublicAttendanceCode takes the place of AttendanceCode
public PublicAttendanceCode AttendanceCode { get; set; }
}
И:
public class PrivateAttendanceCode : AttendanceCode {}
public class PrivateLeave : AttendanceEvent
{
// PrivateAttendanceCode takes the place of AttendanceCode
public PrivateAttendanceCode AttendanceCode { get; set; }
}
Я думал об использовании Generics, поэтому у меня было бы:
public abstract AttendanceEvent<T> where T : AttendanceCode
Но я не уверен, рекомендуется ли это для сущностей или будет ли это работать с EF Code First.Другой способ ограничить AttendanceCode - это ограничить его в конструкторе следующим образом:
public class PublicLeave : AttendanceEvent
{
public PubliLeave(PublicAttendanceCode code, DateTime startDateTime, DateTime endDateTime)
{
//more code here
}
}
Мне интересно, каков рекомендуемый способ работы с ситуацией такого типа, и видите ли выкакие подводные камни с использованием одного подхода или другого?