我想弄清楚處理派生類的最佳方式,派生類中也有一個屬性,我想也可以派生自不同的類。讓我告訴你簡化類:繼承:派生類中的派生屬性
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