基类中具体类的类型,在c#中使用泛型

时间:2018-04-10 15:23:52

标签: c# generics inheritance types mapping

我正在创建一个方法,该方法在dto和从基类重写的实体之间执行映射。我在AuthorDto.cs和Dto.cs

中有以下类
public class AuthorDto : Dto<AuthorDto, Author>
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string LastName { get; set; }
    public string FullName { get; set; }

    public override void Map(IMap<AuthorDto, Author> mapper)
    {
        mapper.Map(t => t.FullName, t => t.Name + " " + t.LastName);
    }
}

public abstract class Dto<TDto, TEntity> where TDto : class where TEntity : class
{      
    public virtual void Map(IMap<TDto, TEntity> mapper) { }
}

我需要确保当我覆盖基本Map方法时,IMap参数的第一个参数必须是Dto的实际具体类。

还有另一种方法可以执行此操作而不用明确指示Dto中的第一个参数,获得继承如

public class AuthorDto : Dto<Author>

1 个答案:

答案 0 :(得分:0)

我想你是说你想把TDto类型限制为继承类?

public abstract class Dto<TDto, TEntity> where TDto : Dto<TDto, TEntity> where TEntity : class

这将确保TDto是继承自基础Dto类的类。

如果没有明确定义TDto类型参数,您将无法继承,因为它必须为Map方法所知。