繁体   English   中英

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

[英]Does C# have an equivalent of Java static nested class?

我正在将 Java 转换为 C# 并具有以下代码(请参阅Java Context 中有关其使用的讨论)。 一种方法可能是创建一个单独的文件/类,但是否有一个 C# 习惯用法可以保留 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 静态嵌套类:

C#:

class Outer
{
    class Inner
    {
    }
}

就像Java的:

class Outer
{
    static class Inner
    {
    }
}

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

没有在C#中,虽然一个Java内部类的等价物。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM