我想弄清楚处理派生类的最佳方式,派生类中也有一个属性,我想也可以派生自不同的类。让我告诉你简化类:继承:派生类中的派生属性
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; }
}
我想过使用泛型所以我会:
public abstract AttendanceEvent<T> where T : AttendanceCode
Bu t我不确定这是建议实体使用还是与EF Code First一起使用。不过,我觉得要不要去约制约AttendanceCode的另一种方法是限制它在构造函数中,像这样:
public class PublicLeave : AttendanceEvent
{
public PubliLeave(PublicAttendanceCode code, DateTime startDateTime, DateTime endDateTime)
{
//more code here
}
}
我想知道什么是处理这种情况的推荐方式和你看到的任何缺陷使用一种方法还是另一种?
我说没有额外的属性在派生类中添加,只是继续使用现有的AttendanceCode属性。我的直觉是你在试图做你正在做的事情时违反了LSP。 – 2011-03-18 00:12:19