使用派生类型实现抽象 class
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 class 用于传输数据。这是它的代码
public abstract class BaseDTO
{
protected abstract void ConvertFromEntity(BaseEntity entity);
public abstract void ConvertToEntity();
}
然后我去创建实现 class 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>();
}
以及派生的 class 中的以下内容:
protected override void ConvertFromEntity<T>(T entity) where T:DocNum
{
throw new NotImplementedException();
}
但是现在报错是Constraints for override 显式接口实现方法继承自基方法,所以不能直接指定
任何人都可以帮助我实现这个解决方案,以便 DTODocNum 可以在引用实体类型时进行编译吗?
将类型参数移动到class级别并添加约束:
public abstract class BaseDTO<T> where T : BaseEntity
{
protected abstract void ConvertFromEntity(T entity);
public abstract T ConvertToEntity();
}
public class DTODocNum : BaseDTO<DocNum> { ... }
这可能在通用类型下的其他地方,但我似乎无法理解很多答案。如果这是另一个问题的重复,我们深表歉意。
以下代码适用于具有数据层、逻辑层和表示层的三层应用程序
在我的数据层中,我有一个实体集合和一个基本实体
public abstract class BaseEntity
{
int LastModifiedBy { get; set; }
DateTime LastModifiedDate{get;set;}
}
public partial class DocNum: BaseEntity
{
}
public partial class DataList: BaseEntity
{
}
在我的逻辑层中,我有一个 BaseDTO class 用于传输数据。这是它的代码
public abstract class BaseDTO
{
protected abstract void ConvertFromEntity(BaseEntity entity);
public abstract void ConvertToEntity();
}
然后我去创建实现 class 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>();
}
以及派生的 class 中的以下内容:
protected override void ConvertFromEntity<T>(T entity) where T:DocNum
{
throw new NotImplementedException();
}
但是现在报错是Constraints for override 显式接口实现方法继承自基方法,所以不能直接指定
任何人都可以帮助我实现这个解决方案,以便 DTODocNum 可以在引用实体类型时进行编译吗?
将类型参数移动到class级别并添加约束:
public abstract class BaseDTO<T> where T : BaseEntity
{
protected abstract void ConvertFromEntity(T entity);
public abstract T ConvertToEntity();
}
public class DTODocNum : BaseDTO<DocNum> { ... }