c# - C#中类的默认访问修饰符

标签 c# ildasm

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/

相关文章:

c# - IL代码中maxstack值的计算

.net - ildasm,然后是具有相同元数据的 ilasm

.net - 程序集重新编译和程序集加载问题

c# - 如何反编译 .net framework 的 IL 代码

c# - DataAnnotations "NotRequired"属性

c# - 如何对心跳模式进行单元测试?

c# - 何时在数据类中使用 char 字段

c# - 在 C# 中,为什么数组上的 Equals() 方法只比较它们的引用,而不是它们的实际内容

c# - IL中 "specialname"和 "rtspecialname"的用途和意义

c# - 无法连接到本地服务器上的 MySQL