C#是否具有Java静态嵌套类的等价物?

pet*_*ust 20 c# java static nested class

我正在将Java转换为C#并具有以下代码(请参阅Java Context中关于其使用的讨论).一种方法可能是创建一个单独的文件/类,但是有一个C#idom保留了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) {
    // ...
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 75

所有 C#嵌套类都类似于Java静态嵌套类:

C#:

class Outer
{
    class Inner
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

就像Java一样:

class Outer
{
    static class Inner
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

换句话说,一个实例Inner 没有对实例的隐式引用Outer.

没有一个Java的等效的C#类,但是.

两种语言之间的可访问性规则有所不同:在C#中,嵌套类中的代码可以访问包含类中的私有成员; 在Java中,它是相反的.

  • @Mishax:好吧,C# 中的静态类在 Java 中没有等价物,无论它们是顶级的还是嵌套的。 (3认同)
  • 我认为您的意思是所有*非静态* C# 嵌套类都类似于 Java 静态嵌套类? (2认同)
  • 那是真实的!我的观点是您在答案中强调了“全部”,我认为“所有 C# 嵌套类都像 Java 静态嵌套类”这句话是错误的 (2认同)
  • 完美的答案,除了一件事:_“在 C# 中,嵌套类中的代码可以访问包含类中的私有成员;在 Java 中则相反。”_ ...在 Java 中,它不是另一个反过来,但双向:在 Java 中,包含类可以访问嵌套类的私有成员,而嵌套类可以访问包含类的私有成员。 (2认同)

Mae*_*024 3

看看这个 http://blogs.msdn.com/oldnewthing/archive/2006/08/01/685248.aspx

我正在专门看

换句话说,Java 内部类是 C# 所没有的语法糖。在 C# 中,您必须手动执行此操作。

如果你愿意,你可以创建自己的糖:

class OuterClass {
 ...
 InnerClass NewInnerClass() {
  return new InnerClass(this);
 }
 void SomeFunction() {
  InnerClass i = this.NewInnerClass();
  i.GetOuterString();
 }
}
Run Code Online (Sandbox Code Playgroud)

如果您想用 Java 编写 new o.InnerClass(...),则可以用 C# 编写 o.NewInnerClass(...) 或 new InnerClass(o, ...)。是的,这只是一堆新词的移动。就像我说的,这只是糖。

  • Java的静态嵌套类只是用于作用域机制。Java 的静态嵌套类直接转换为 C# 的:`class Foo { class Group { } }`。这不是正确答案,请选择@JonSkeet 答案 (12认同)