一种方法是使用委派
Lerp()
功能。如果他们都有相同的签名,那将是最简单的。
例如。,
public static Template CreateTemplate<T>( ... , Func<T, T, int, Template> lerp)
where T : CommonClass
{
XmlNode mineDataMin = mineDataMaster.SelectSingleNode("DataMinimum");
XmlNode mineDataMax = mineDataMaster.SelectSingleNode("DataMaximum");
return lerp(new T(mineDataMin), new T(mineDataMax), _strength);
}
_template = CreateTemplate( ... , MineInfo.Lerp);
或者,如果它们没有公共签名,则使用具有“最大公分母”的委托作为签名来调用实际的LERP函数。
_template = CreateTemplate( ... ,
(min, max, strength) =>
{
return SomeOtherInfoInfo.Lerp(min, max); //doesn't use strength
});
否则总会有反省。