Имеет ли С# эквивалент статического вложенного класса 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
У вас может быть статический вложенный класс в С#, в соответствии с Вложенные классы.