想象一下,我有一个像这样的通用基类:
public abstract class AnimalDTO<TA, TB>
{
public static TB ToDTO(TA entity)
{
return ConvertToDTO<TB>(entity);
}
}
该类负责将传入的实体转换为DTO。
我有一个使用这个泛型类的类:
public class MammalDTO<Mammal, MammalDTO>
{
// omitted stuff here
}
用户现在可以使用MammalDTO.ToDTO(mammal)
将Mammal
转换为MammalDTO
。
现在我想得出哺乳动物:
public class Koala<???, ???> : Mammal<???, ???>
我该怎么做?
答案 0 :(得分:1)
一种解决方案是使MammalDTO
成为开放但受约束的泛型类型。
然后,您可以在继承层次结构中进一步限制泛型,然后在叶子上关闭它。适当地使用抽象类也是合适的,但这不是模式的要求。
说实话,我并不喜欢“自我引用的通用”模式;我发现它很混乱。
public abstract class Animal { }
public abstract class Mammal : Animal { }
public sealed class Koala : Mammal { }
public abstract class AnimalDTO<TAnimal, TDTO> where TAnimal : Animal
{
public abstract TDTO ConvertToDTO(TAnimal entity);
}
public abstract class MammalDTO<TMammal, TMammalDTO> : AnimalDTO<TMammal, TMammalDTO>
where TMammal : Mammal
where TMammalDTO : MammalDTO<TMammal, TMammalDTO>{}
public sealed class KoalaDTO : MammalDTO<Koala, KoalaDTO>
{
public override KoalaDTO ConvertToDTO(Koala entity)
{
throw new NotImplementedException();
}
}