【发布时间】:2011-03-18 00:05:00
【问题描述】:
我正在尝试找出处理派生类的最佳方法,该派生类中也有我想从不同类派生的属性。让我向您展示简化的类:
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
但我不确定这是否推荐给实体,或者它是否适用于 EF Code First。我想约束 AttendanceCode 的另一种方法是在构造函数中约束它,如下所示:
public class PublicLeave : AttendanceEvent
{
public PubliLeave(PublicAttendanceCode code, DateTime startDateTime, DateTime endDateTime)
{
//more code here
}
}
我想知道处理这种情况的推荐方法是什么,您是否发现使用一种方法或另一种方法存在任何缺陷?
【问题讨论】:
-
我想说不要在派生类中添加额外的属性,继续使用现有的 AttendanceCode 属性。我的直觉是,您在尝试做您正在做的事情时违反了 LSP。
标签: c# inheritance abstract-class