C# 是否具有 Java 静态嵌套类的等效项?

2022-09-01 21:34:15

我正在将Java转换为C#,并有以下代码(请参阅Java上下文中有关其用法的讨论)。一种方法可能是创建一个单独的文件/类,但是是否有一个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) {
    // ...
            }
        }
    }

答案 1

C# 嵌套类类似于 Java 静态嵌套类:

C#:

class Outer
{
    class Inner
    {
    }
}

就像Java的:

class Outer
{
    static class Inner
    {
    }
}

换句话说,的实例没有对 实例的隐式引用。InnerOuter

不过在C#中没有Java内部类的等价物。

但是,两种语言之间的可访问性规则有些不同:在C#中,嵌套类中的代码可以访问包含类中的私有成员;在 Java 中,在一个顶级类型中声明的所有代码都可以访问在同一顶级类型中声明的所有其他私有成员。


答案 2

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