Участник:Phersu/Java vs. CSharp

Материал из LingvoWiki
< Участник:Phersu
Версия от 13:38, 11 февраля 2012; Phersu (обсуждение | вклад) (Новая страница: «== Адаптеры (анонимные классы) vs. делегаты == Адаптеры в Java более flexible, так как могут хранить …»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигацииПерейти к поиску

Адаптеры (анонимные классы) vs. делегаты

Адаптеры в Java более flexible, так как могут хранить своё состояние между вызовами (что бывает очень полезно). В случае с делегатами в C# состояние предполагается хранить во внешнем scope, что замусоривает код. И делегаты, и адаптеры поддерживают замыкания и отличаются только синтаксисом.

Синтаксис у делегатов покороче, однако адаптеры позволяют объединять несколько методов в один логический listener, благодаря чему в итоге можно сделать API в Java компактнее:

C#:

public delegate void ClickDelegate();
public delegate void MoveDelegate();
public delegate void KeyDelegate();
obj.OnClick += obj_onClick;
obj.OnMove += obj_onMove;
obj.OnKey += obj_onKey;

Java:

obj.addListener(new Listener() {
public void onClick() { }
public void onMove() { }
public void onKey() { }
});

См. http://java.sun.com/docs/white/delegates.html