我正在将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) {
// ...
}
}
}
答案 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#中拥有静态嵌套类。