Как определить производный класс во время выполнения и разрешить вызов полиморфного метода - PullRequest
0 голосов
/ 18 марта 2012

У меня есть функция, которая принимает два параметра базового класса. В этой функции я хочу протестировать типы этих параметров в ряде производных классов, а затем вызвать полиморфную функцию. Смотрите ниже, чтобы увидеть мою первую попытку, которая не скомпилируется.

    public static double Intersect(baseClass s0, baseClass s1)
    {
          if (s1 is derivedClassB) return (s0 as derivedClassA).PolyMethod((derivedClassB)s1);

          else if (s1 is derivedClassC) return (s0 as  derivedClassA).PolyMethod((derivedClassC)s1);
                    else return 0.0;

    }

Я думал, что смогу использовать что-то вроде

Type dType = s0.GetType();
(s0 as dType).PolyMethod(derivedClassB) s1);

но это тоже не работает.

1 Ответ

2 голосов
/ 18 марта 2012

Определите свой базовый класс следующим образом

public abstract BaseClass
{
    public abstract double PolyMethod(BaseClass s);
}

Определить производные классы, как это

public DerviedClassX : BaseClass
{
    public override double PolyMethod(BaseClass s)
    {
        return 0.0; // Return something usefull here.
    }
}

Тогда ваш метод можно упростить следующим образом

public static double Intersect(BaseClass s0, BaseClass s1)
{
    return s0.PolyMethod(s1);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...