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

时间:2009-10-17 11:07:15

标签: c# java static class nested

我正在将Java转换为C#并具有以下代码(请参阅discussion in 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) {
    // ...
            }
        }
    }

3 个答案:

答案 0 :(得分:72)

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

C#:

class Outer
{
    class Inner
    {
    }
}

就像Java一样:

class Outer
{
    static class Inner
    {
    }
}

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

不是相当于C#中的Java 内部类。

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

答案 1 :(得分:4)

看看这个 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,...)。是的,它只是一个   一堆移动新的词周围。   就像我说的,它只是糖。

答案 2 :(得分:-1)

根据Nested Classes,您可以在C#中拥有静态嵌套类。