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