Имеет ли С# эквивалент статического вложенного класса Java?

Я конвертирую Java в С# и имею следующий код (см. обсуждение в Java Context об использовании). Один из подходов может заключаться в создании отдельного файла/класса, но есть ли идентификатор С#, который сохраняет намерение в коде Java?

   public class Foo {

    // Foo fields and functions
    // ...
        private static class SGroup {
            private static Map<Integer, SGroup> idMap = new HashMap<Integer, SGroup>();

            public SGroup(int id, String type) {
    // ...
            }
        }
    }

Ответы

Ответ 1

Дайте это посмотреть http://blogs.msdn.com/oldnewthing/archive/2006/08/01/685248.aspx

Я смотрю конкретно на

Другими словами, внутренние классы Java синтаксический сахар, который недоступен на С#. В С# вам нужно это сделать вручную.

Если вы хотите, вы можете создать свой собственный сахар:

class OuterClass {
 ...
 InnerClass NewInnerClass() {
  return new InnerClass(this);
 }
 void SomeFunction() {
  InnerClass i = this.NewInnerClass();
  i.GetOuterString();
 }
}

Где вы хотите писать на Java новый o.InnerClass(...), вы можете написать в С# либо o.NewInnerClass(...), либо новый InnerClass (o,...). Да, это просто куча перемещения нового слова. Как я уже сказал, это просто сахар.

Ответ 2

Все вложенные классы С# похожи на статические вложенные классы Java:

С#:

class Outer
{
    class Inner
    {
    }
}

Является как Java:

class Outer
{
    static class Inner
    {
    }
}

Другими словами, экземпляр Inner не имеет неявной ссылки на экземпляр Outer.

В С# нет эквивалента внутреннего класса Java.

Правила доступности несколько отличаются между двумя языками: в С# код в вложенном классе имеет доступ к закрытым членам в классе -содержании; в Java это наоборот.

Ответ 3

У вас может быть статический вложенный класс в С#, в соответствии с Вложенные классы.