簡體   English   中英

使用派生類型實現抽象類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM