none
Преобразование методов в полиморфизм RRS feed

  • Вопрос

  • Всем привет! У меня есть некая иерархия классов, в которой есть базовый класс Event, от него порождены разные виды событий. Есть еще класс EventList, в котором есть список этих событий, через методы которого можно добавлять и обрабатывать события.

    В классе EventList есть куча методов типа:

    public static void Event1(params){

        var evt = new Event1();

        evt.Position = new Position(params);

        // инициализируются поля

        EventList.Add(evt);

    }

    public static void Event2(other params){

        var evt = new Event2();

        evt.Position = new Position(params);

        // инициализируются поля, в каждом подклассе Event есть свои дополнительные поля

        EventList.Add(evt);

    }

    и так далее для каждого типа события. 

    Смысл в том, что эти методы делают одно и то же, создают какой-то вид события. Хотелось бы распихать их по соответствующим классам событий и использовать полиморфизм, но у этих методов разные наборы параметров. Можно ли как-то это победить?


    • Изменено pingvincible 30 октября 2014 г. 10:16
    • Перемещено YatajgaEditor 30 октября 2014 г. 11:33
    30 октября 2014 г. 10:12

Ответы

  • Добрый день.

    Да, конечно. Пусть ваши методы принимают не набор параметров, а один параметр типа BaseParamClass. Для каждого события делаете класс потомок от него. Ну и при вызове полиморфного метода, непосредственно в классе события, проверяете тот потомок вам передали или нет.

    • Помечено в качестве ответа pingvincible 30 октября 2014 г. 12:49
    30 октября 2014 г. 10:33
    Отвечающий

Все ответы

  • Добрый день.

    Да, конечно. Пусть ваши методы принимают не набор параметров, а один параметр типа BaseParamClass. Для каждого события делаете класс потомок от него. Ну и при вызове полиморфного метода, непосредственно в классе события, проверяете тот потомок вам передали или нет.

    • Помечено в качестве ответа pingvincible 30 октября 2014 г. 12:49
    30 октября 2014 г. 10:33
    Отвечающий
  • Алексей, спасибо за ответ. Только в каком виде выделить этот полиморфный метод в субклассы событий?

    Мне вот в голову пришла такая мысль: я превратил методы класса EventList в конструкторы в соответствующих классах событий. А в классе EventList создал метод Add(Event e), с параметром базового класса событий.

    Раньше вызов проходил так:

    EventList.AddEventOne(param1, param2);

    EventList.AddEventTwo(param1, param2, param3);

    ...

    EventList.AddEventHundred(param1, param2, param3);

    Теперь же вызов будет происходить как:

    EventList.Add(new EventOne(param1, param2));

    EventList.Add(new EventTwo(param1, param2, param3));

    ...

    EventList.Add(new EventHundred(param1, param2, param3));

    Получается, что кучка методов из класса EventList разбежалась по классам событий. Стоит ли сюда приделывать иерархию классов параметров, о которой вы говорите?

    30 октября 2014 г. 12:17
  • EventOne и EventTwo у вас имеют общего предка? Если да, то вы иерархию уже сделали.

    30 октября 2014 г. 12:36
    Отвечающий
  • Да, они имеют. Спасибо за помощь!
    30 октября 2014 г. 12:48
  • Пожалуйста. Обращайтесь ;)
    30 октября 2014 г. 12:50
    Отвечающий