繁体   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