Полиморфный вызов метода не компилируется - PullRequest
1 голос
/ 18 марта 2012

У меня следующий полиморфный вызов метода с двумя абстрактными параметрами сегмента, однако у меня есть ошибка, связанная с этим вызовом

    public static void Connected(Segment s1, Segment s2)
        {
            s1.Connected(s2);
            //further working code
        }

Я определил ряд абстрактных методов

    public abstract bool Connected(derivedSegment0 s);
    public abstract bool Connected(derivedSegment1 s);
    public abstract bool Connected(derivedSegment2 s);
    public abstract bool Connected(derivedSegment3 s);

Какие для каждого производного класса реализовали каждый из них (итого 16 в этом примере)

    public override bool Connected(derivedSegment0 s)
    {
        //working code
    }

Мне неясно, почему вызов не компилируется. У меня ошибка CS1502: у лучшего совпадения перегруженного метода для 'Segment.Connected (производнаяSegment1)' есть некоторые недопустимые аргументы. Спасибо

1 Ответ

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

Вы пытаетесь выполнить двойную диспетчеризацию , которую C # не поддерживает.
В C # все разрешение перегрузки (кроме dynamic) полностью выполняется во время компиляции.

Вместо этого вы можете использовать шаблон посетителя .

...