我有一个像
abstract class A <TEntity, TLog>
{
public abstract TLog Get(TEntity entity);
}
和一些子类,如
class B : A<Branch, BranchLog>
{
public override BranchLog Get(Branch entity)
{
return null;
}
}
现在我可以根据其对基类的通用实现来获取子类的实例,
class Mapper
{
public TLog GetMapped<TEntity, TLog>(TEntity entity)
{
/*if called with GetMapped<Branch, BranchLog>, make instance of B b = new B()*/
/*returng b.Get(entity)*/
return null;
}
}
或以任何方式而不是反思
再添加一个通用参数来说明类型。用约束新的通用参数,new()
以便我们可以对其进行更新,A<TEntity, TLog>
并确保只能A
传递或其子类的实例。
class Mapper
{
public TLog GetMapped<TType, TEntity, TLog>(TEntity entity) where TType : A<TEntity, TLog>, new()
{
TType instance = new TType();
return instance.Get(entity);
}
}
然后称它为
Mapper mapper = new Mapper();
mapper.GetMapped<B, Branch, BranchLog>(branch);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句