【问题标题】:Does C# have an equivalent of Java static nested class?C# 是否具有等效于 Java 静态嵌套类的功能?
【发布时间】:2010-12-07 14:34:51
【问题描述】:

我正在将 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) {
    // ...
            }
        }
    }

【问题讨论】:

    标签: c# java static class nested


    【解决方案1】:

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

    C#:

    class Outer
    {
        class Inner
        {
        }
    }
    

    就像 Java 的:

    class Outer
    {
        static class Inner
        {
        }
    }
    

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

    虽然没有相当于 C# 中的 Java inner 类。

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

    【讨论】:

    • 我想你的意思是所有 非静态 C# 嵌套类都像 Java 静态嵌套类?
    • @Mishax:嗯,C# 中的静态类在 Java 中没有等价物,无论它们是顶级的还是嵌套的。
    • 这是真的!我的意思是您在回答中强调了“全部”,我认为“所有 C# 嵌套类都像 Java 静态嵌套类”这句话是错误的
    • 完美答案,除了一件事:“在 C# 中,嵌套类中的代码可以访问包含类中的私有成员;在 Java 中则相反。” i> ...在Java中,不是相反,而是两种方式:在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 写的地方 new o.InnerClass(...) 你可以写 C# o.NewInnerClass(...) 或 new 内部类(o,...)。是的,这只是一个 一堆移动新词。 就像我说的,它只是糖。

    【讨论】:

    • 该博客很有用,并表明该结构可能导致一些难看的语法。
    • Java 的静态嵌套类仅用于范围机制。 Java 的静态嵌套类直接转换为 C# 的:class Foo { class Group { } }。这不是正确答案,选择@JonSkeet 答案
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2011-06-13
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      相关资源
      最近更新 更多