在基类中使用的继承类中创建的对象

Aag*_*nor 2 c# architecture inheritance class-design

对于对象序列化我为每个对象创建了一个DataTransferObject-Pendant.每个原始对象都有一个ToDTO()方法,该方法返回具有要保存属性的相应DTO-Object.我的大多数原始对象都是从另一个继承的,所以我希望每个继承级别都能够关注自己的属性.一个简单的例子:

class base
{
  private string _name;

  public DTO_base ToDTO()
  {
    DTO_base result = new DTO_base();
    result.Name = _name;
    return result;
  }
}
Run Code Online (Sandbox Code Playgroud)

继承的类应该重写ToDTO()方法,调用parents方法并添加自己要保存的属性,如:

class inherited : base
{
  private string _description;

  public new DTO_inherited ToDTO()
  {
    DTO_inherited result = base.ToDTO();
    result.Description = _description;
    return result;
  }
}
Run Code Online (Sandbox Code Playgroud)

显然,这不会起作用,因为base.ToDTO()返回一个DTO_base对象.任何人都可以建议,如何最好地实现此功能?

先谢谢你,
弗兰克

Flo*_*her 5

如果您真的想在业务对象中使用DTO创建逻辑,我会选择通用方法.

class Base<TDTO> where TDTO : BaseDTO, new()
{
    private string _name;

    public TDTO ToDTO()
    {
        TDTO dto = new TDTO();
        SetupDTO(dto);
        return dto;
    }

    protected virtual void SetupDTO(TDTO dto)
    {
        dto.Name = _name;
    }
}


class Inherited : Base<InheritedDTO>
{
    private string _description;

    protected override void SetupDTO(TDTO dto)
    {
        base.SetupDTO(dto);

        dto.Description = _description;
    }
}
Run Code Online (Sandbox Code Playgroud)