Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模式帮助:C语言中的多级泛型继承#_C#_.net_Generics_Inheritance_Design Patterns - Fatal编程技术网

C# 模式帮助:C语言中的多级泛型继承#

C# 模式帮助:C语言中的多级泛型继承#,c#,.net,generics,inheritance,design-patterns,C#,.net,Generics,Inheritance,Design Patterns,我有一个类似以下示例的多级类层次结构: Model Dto / \ / \ CompanyModels User Model, etc.. CompanyDto UserDto, etc.. / \

我有一个类似以下示例的多级类层次结构:

                  Model                                      Dto
                 /    \                                     /  \
     CompanyModels    User Model, etc..           CompanyDto   UserDto, etc..
     /         \                                  /        \
PeopleModel  OfficeModel                     PeopleDto   OfficeDto
所有“公司模型”共享相同的属性(名称、地址等),子模型“人员”、“办公室”等。。。添加其他属性

在“Model”基类中,我使用了以下方法,旨在将模型拆分为仅需要通过导线的部分:

public virtual T AsDto<T>() where T : Dto, new()
{
     var dto = new T();

     dto.CreatedDate = this.CreatedDate;
     dto.CreatedUserID = this.CreatedUserID; //etc..

     return dto;
} 
public virtual T AsDto(),其中T:Dto,new()
{
var dto=新的T();
dto.CreatedDate=this.CreatedDate;
dto.CreatedUserID=this.CreatedUserID;//等。。
返回dto;
}
在我的一生中,我无法找到让“公司模型”处理“PeopleModel”和“OfficeModel”共享的属性分配的最佳模式

目前,我已设置了以下设置,我相当肯定这些设置将不起作用:

public class CompanyModel : Model
{
     public override CompanyDto AsDto<T>()
     {
          CompanyDto c = base.AsDto<CompanyDto>();
          c.CompanyName = this.CompanyName; //etc...
          return c;
     }
}

public class PeopleModel : CompanyModel
{
     public override PeopleDto AsDto<T>()
     {
          PeopleDto p = base.AsDto<PeopleDto>() as PeopleDto; //will return null
          p.FirstName = this.FirstName;
          p.LastName = this.LastName; //etc...
          return p;
     }
}
公共类公司模型:模型
{
公共覆盖公司到AsDto()
{
CompanyDto c=base.AsDto();
c、 CompanyName=this.CompanyName;//等等。。。
返回c;
}
}
公共类人员模型:CompanyModel
{
公共覆盖人到AsDto()
{
PeopleDto p=base.AsDto()as PeopleDto;//将返回null
p、 FirstName=this.FirstName;
p、 LastName=this.LastName;//等等。。。
返回p;
}
}
请帮我找出实现这一目标的正确模式,因为目前我认为我已经盯着这个太久了

提前谢谢

public class Model
{
    public DateTime CreatedDate { get; set; }
    public int CreatedUserID { get; set; }

    public virtual Dto AsDto()
    {
        return FillDto(new Dto());
    }

    protected Dto FillDto(Dto dto)
    {
        dto.CreatedDate = this.CreatedDate;
        dto.CreatedUserID = this.CreatedUserID; //etc..
        return dto;
    }
}


public class CompanyModel : Model
{
    public string CompanyName { get; set; }

    public override Dto AsDto()
    {
        return FillDto(new CompanyDto());
    }

    protected CompanyDto FillDto(CompanyDto dto)
    {
        base.FillDto(dto);
        dto.CompanyName = this.CompanyName;
        return dto;
    }
}

public class PeopleModel : CompanyModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public override Dto AsDto()
    {
        return FillDto(new PeopleDto());
    }

    protected PeopleDto FillDto(PeopleDto dto)
    {
        base.FillDto(dto);
        dto.FirstName = this.FirstName;
        dto.LastName = this.LastName; //etc...
        return dto;
    }
}