我有一个通用接口,用于定义将类型T
映射到类型U
的方法。界面定义如下:
public interface IDataMapper<T, U>
{
U Map(T toMap);
}
使用T
和U
的约束实现此接口的优势是什么,而不是直接指定类型。例如,使用:
public class AuditFileMapper<T, U> : IDataMapper<T, U> where T : Audit where U : File
{
public virtual U Map(T toMap)
{
//Implementation details here.
}
}
而不是:
public class AuditFileMapper : IDataMapper<Audit, File>
我能想到的一个好处是,如果你继承自AuditFileMapper
,你可以改变孩子的类型Audit
或File
,而不必将类型转换为相应的子类。还有更多优势吗?例如:
public class ExtendedAuditFile : AuditFileMapper<ExtendedAudit, XMLFile>
{
public override XMLFile Map(ExtendedAudit toMap)
{
base.Map(toMap);
//Implementation details here.
}
}
其中ExtendedAudit
是Audit
的孩子,而XMLFile
的孩子是File
的孩子。