C#是否具有Java静态嵌套类的等价物?
我正在将Java转换为C#并具有以下代码(请参阅Java Context中关于其使用的讨论 )。 一种方法可能是创建一个单独的文件/类,但是有一个C#idom保留了Java代码中的意图吗?
public class Foo { // Foo fields and functions // ... private static class SGroup { private static Map idMap = new HashMap(); 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(…)或new InnerClass(o,…)。 是的,这只是一堆动人的新词。 就像我说的,它只是糖。
所有 C#嵌套类都类似于Java静态嵌套类:
C#:
class Outer { class Inner { } }
就像Java一样:
class Outer { static class Inner { } }
换句话说, Inner
的实例没有对Outer
实例的隐式引用。
但是在C#中没有相当于Java的内部类。
两种语言之间的可访问性规则有所不同:在C#中,嵌套类中的代码可以访问包含类中的私有成员; 在Java中,它是相反的。
根据嵌套类 ,您可以在C#中拥有静态嵌套类 。