Здравствуйте, Blazkowicz, Вы писали:
баг>>4. Коллбэки. В C++ функторы и указатели на функции, в C# делегаты, а здесь что?
B>Анонимные классы. C# делегаты вроде просто скрывают реализию Observer. Ссылки на метод реально не хватает.
Это уж точно. Анонимные классы довольно громоздки:
myButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
frame.toFront();
}
});
К тому же, каждый анонимный класс — несколько сот байт кода. А их в типичной форме десятки.
В некоторых случаях помогает EventHandler. Вышеприведённые 8 строчек записываются одной. Минусы:
1) Динамика. Нет статического контроля типов, возможны банальные описки, которые отловятся только в рантайме.
2) Методы-обработчики должны быть публичными.
3) Проблема с перегрузкой.
4) Ограниченное применение — только один аргумент, нет возвращаемого значения, нет связанных переменных.