Каковы фундаментальные различия между Java и C # с точки зрения внутренних / локальных / анонимных классов? - PullRequest
5 голосов
/ 26 марта 2009

Каковы фундаментальные различия между Java и C # в терминах внутренних / локальных / анонимных классов ?

Ответы [ 2 ]

8 голосов
/ 26 марта 2009

C # не имеет эквивалента внутренних классов Java - у него есть только вложенные типы (например, «статические» вложенные классы Java).

Правила доступа немного отличаются - в Java внешний класс имеет доступ к закрытым членам своего вложенного класса и наоборот. В C # вложенный класс имеет доступ к закрытым членам внешнего класса, но не наоборот.

C # не имеет анонимных внутренних классов, таких как Java, но имеет анонимные методы и лямбда-выражения, которые являются намного более чистым способом достижения большинства из того, что анонимные внутренние классы обычно используются для. Переменная захвата для двух механизмов различна - для получения более подробной информации см. мою статью о замыканиях .

2 голосов
/ 26 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...