Любопытная проблема, включающая дженерики и статические методы

У меня есть много классов данных, которые совместно используют абстрактный базовый класс, таким образом, я могу работать с ними в общем (вид). У каждого из них есть статический метод под названием Lerp, который я часто использую наряду с несколькими другими строками. Я хотел осуществить рефакторинг это в метод из-за DRY, но кажется, что нет никакого способа сделать так. Как я обхожу это?

Может предоставить код, если необходимо.

Код - в основном это:

        XmlNode mineDataMin = mineDataMaster.SelectSingleNode("DataMinimum");
        XmlNode mineDataMax = mineDataMaster.SelectSingleNode("DataMaximum");
        _mineTemplate = MineInfo.Lerp(
            new MineInfo(mineDataMin),
            new MineInfo(mineDataMax),
            _strength);

где класс, MineInfo может быть одним из нескольких классов, которые весь совместно используют абстрактный класс, который используется для способности иметь дело с любым из них в общем. Lerp является статическим методом, который является источником проблемы.

1
задан RCIX 31 July 2010 в 04:40
поделиться

1 ответ

Один из способов сделать это - использовать делегирование для вашей функции 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
    });

Иначе всегда есть отражение.

2
ответ дан 2 September 2019 в 22:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: