C#是否有Java静态嵌套类的等价物?
我正在将Java转换为C#,并有以下代码(请参阅关于其使用的内容)。一种方法可能是创建一个单独的文件/类,但是是否有一个C#idom在Java代码中保留了这个意图C#是否有Java静态嵌套类的等价物?,c#,java,static,class,nested,C#,Java,Static,Class,Nested,我正在将Java转换为C#,并有以下代码(请参阅关于其使用的内容)。一种方法可能是创建一个单独的文件/类,但是是否有一个C#idom在Java代码中保留了这个意图 public class Foo { // Foo fields and functions // ... private static class SGroup { private static Map<Integer, SGroup> idMap = ne
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) {
// ...
}
}
}
公共类Foo{
//Foo字段和函数
// ...
私有静态类SGroup{
私有静态映射idMap=newhashmap();
公共SGroup(int-id,字符串类型){
// ...
}
}
}
看看这个
我特别关注的是
换句话说,Java内部类是
不可用的语法糖
到C#。在C#中,你必须这样做
手动
如果您愿意,您可以创建自己的
糖:
您想在哪里用Java编写
可以写入的新o.InnerClass(…)
C#o.NewInnerClass(…)或new
内部类(o,…)。是的,这只是一个例子
一堆新单词的移动。
就像我说的,只是糖
所有C#嵌套类都类似于Java静态嵌套类:
C#:
就像Java的:
class Outer
{
static class Inner
{
}
}
换句话说,内部
的实例没有对外部
实例的隐式引用
不过,C语言中没有Java内部类的等价物
不过,这两种语言的可访问性规则有些不同:在C#中,嵌套类中的代码可以访问包含类中的私有成员;在Java中,在一个顶级类型中声明的所有代码都可以访问在同一顶级类型中声明的所有其他私有成员。根据,您可以在C#中拥有一个静态嵌套类。博客很有用,并且显示了该构造可能导致一些难看的语法。Java的静态嵌套类只是用于作用域机制。Java的静态嵌套类直接转换为C#:
class Foo{class Group{}
。这不是正确答案,选择@JonSkeet answer我想你的意思是所有非静态C#嵌套类都像Java静态嵌套类?@Mishax:嗯,C#中的静态类在Java中没有等价物,不管它们是顶级的还是嵌套的。这是真的!我的观点是你在回答中强调了“All”,我认为“所有C#嵌套类都像Java静态嵌套类”这句话是错误的完美答案,除了一件事:“在C#中,嵌套类中的代码可以访问包含类中的私有成员;在Java中则相反。”。。。在Java中,情况并非相反,而是两种情况:在Java中,包含类可以访问嵌套类的私有成员,而嵌套类可以访问包含类的私有成员。
class Outer
{
class Inner
{
}
}
class Outer
{
static class Inner
{
}
}