[英]implementing abstract class using derived types
這可能是泛型類型下的其他地方,但我似乎無法遵循很多答案。 抱歉,如果這是另一個問題的重復。
以下代碼適用於具有數據,邏輯和表示層的三層應用程序
在我的數據層中,我有一個實體集合和一個基本實體
public abstract class BaseEntity
{
int LastModifiedBy { get; set; }
DateTime LastModifiedDate{get;set;}
}
public partial class DocNum: BaseEntity
{
}
public partial class DataList: BaseEntity
{
}
在我的邏輯層中,我有一個BaseDTO類來傳輸數據。 這是它的代碼
public abstract class BaseDTO
{
protected abstract void ConvertFromEntity(BaseEntity entity);
public abstract void ConvertToEntity();
}
然后,我根據以下內容創建實現類DocNum
public class DTODocNum : BaseDTO
{
//properties here
public DTODocNum()
{
}
public DTODocNum(DocNum entity)
{
ConvertFromEntity(entity)
}
protected override void ConvertFromEntity(DocNum entity)
{
throw new NotImplementedException();
}
public override void ConvertToEntity()
{
throw new NotImplementedException();
}
}
但是,這不會告訴我找不到合適的方法來覆蓋。 我知道我可以執行以下操作,但我希望此方法僅接受數據層中的DocNum實體:
protected override void ConvertFromEntity(BaseEntity entity)
{
throw new NotImplementedException();
}
我也嘗試了以下通用類型
public abstract class BaseDTO
{
protected abstract void ConvertFromEntity<T>(T entity);
public abstract T ConvertToEntity<T>();
}
以及派生類中的以下內容:
protected override void ConvertFromEntity<T>(T entity) where T:DocNum
{
throw new NotImplementedException();
}
但是現在給出的錯誤是重寫約束,顯式接口實現方法是從基本方法繼承的,因此無法直接指定它們
有誰能幫助我實現這一解決方案,以便DTODocNum可以在引用實體類型時進行編譯?
將type參數移動到類級別並添加約束:
public abstract class BaseDTO<T> where T : BaseEntity
{
protected abstract void ConvertFromEntity(T entity);
public abstract T ConvertToEntity();
}
public class DTODocNum : BaseDTO<DocNum> { ... }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.