C#中类的默认Access修饰符是internal。 但是在使用ildasm检查类时,它将类显示为私有。
.class private auto ansi beforefieldinit ConsoleApplication1.Program
extends [mscorlib]System.Object
{
} // end of class ConsoleApplication1.Program
知道为什么吗?
答案 0 :(得分:7)
IL没有internal
的概念,如果内部类在根命名空间中,则表示为private
;如果它们嵌套在另一个类型中,则表示为assembly
。
namespace ConsoleApplication1
{
internal class ExplicitInternal
{
private class ExplicitPrivate
{
}
internal class ExplicitNestedInternal
{
}
public class ExplicitNestedPublic
{
}
}
public class ExplicitPublic
{
}
class ImplicitInternal
{
private class ImplicitPrivate
{
}
}
}
变为
.namespace ConsoleApplication1
{
.class private auto ansi beforefieldinit ConsoleApplication1.ExplicitInternal
extends [mscorlib]System.Object
{
.class nested private auto ansi beforefieldinit ExplicitPrivate
extends [mscorlib]System.Object
{
}
.class nested assembly auto ansi beforefieldinit ExplicitNestedInternal
extends [mscorlib]System.Object
{
}
.class nested public auto ansi beforefieldinit ExplicitNestedPublic
extends [mscorlib]System.Object
{
}
}
.class public auto ansi beforefieldinit ConsoleApplication1.ExplicitPublic
extends [mscorlib]System.Object
{
}
.class private auto ansi beforefieldinit ConsoleApplication1.ImplicitInternal
extends [mscorlib]System.Object
{
.class nested private auto ansi beforefieldinit ImplicitPrivate
extends [mscorlib]System.Object
{
}
}
}
答案 1 :(得分:3)
默认访问修饰符的一般规则将是可访问性最低的。 MSDN详细介绍:
直接在命名空间内声明的类和结构(in 换句话说,没有嵌套在其他类或结构中)可以 是公共的还是内部的。如果没有访问权限,内部是默认 修饰符已指定。 Struct成员,包括嵌套类和 结构,可以声明为public,internal或private。类 成员,包括嵌套类和结构,可以是公共的, 受保护的内部,受保护,内部或私人。访问级别 对于类成员和结构成员,包括嵌套类和 结构,默认为私有。
...
必须是字段,属性或事件的任何成员的类型 至少与会员本身一样容易接受。
所以在C#中这些是规则,但我同意评论,你正在处理的特定问题最终归因于内部having no meaning in IL.
答案 2 :(得分:1)
这是内部阶级吗?那将是私人的。
答案 3 :(得分:0)