C#有相当于Java静态嵌套类吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

我将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) {
    // ...
            }
        }
    }
提问于
用户回答回答于

看看这个 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(); } } 如果你想在Java新的o.InnerClass(...)中编写,你可以在C#中写入o.NewInnerClass(...)或新的InnerClass(o,...)。是的,这只是一大堆新词。就像我说的,它只是糖。

用户回答回答于

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

C#:

class Outer
{
    class Inner
    {
    }
}

就像Java的:

class Outer
{
    static class Inner
    {
    }
}

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

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

尽管这两种语言的可访问性规则有些不同:在C#中,嵌套类中的代码可以访问包含类中的私有成员; 在Java中,这是相反的。

扫码关注云+社区