C# 中类的默认访问修饰符是 internal。 但是在用 ildasm 检查类时,它显示类是私有(private)的。
.class private auto ansi beforefieldinit ConsoleApplication1.Program
extends [mscorlib]System.Object
{
} // end of class ConsoleApplication1.Program
知道为什么吗?
最佳答案
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
{
}
}
}
关于c# - C#中类的默认访问修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20056211/