C# CLR如何在程序集外部调用内部类的Main()方法?

C# CLR如何在程序集外部调用内部类的Main()方法?,c#,C#,如果内部类只能由同一程序集中的任何位置访问,而不能在程序集外部访问,那么CLR如何调用Main()方法 using System; namespace test { internal class Program { public static void Main(String[] args){ Console.WriteLine("Testing Internal Modifier!!"); Console.ReadL

如果内部类只能由同一程序集中的任何位置访问,而不能在程序集外部访问,那么CLR如何调用Main()方法

using System;

namespace  test
{
     internal class Program {
        public static void Main(String[] args){
            Console.WriteLine("Testing Internal Modifier!!");
            Console.ReadLine();
        }
    }

}

谢谢。

私有、受保护、内部等。修饰符用于保持代码整洁并帮助您减少错误。除此之外,一切都是可调用的,这些修饰符绝不是阻止CLR甚至其他代码调用代码的安全工具


使用反射,您可以调用类中的每个方法,无论是私有的、内部的还是公共的。您甚至可以将Main()声明为private,它仍然是应用程序的入口点。

private、protected、internal等。修饰符用于保持代码整洁并帮助您减少错误。除此之外,一切都是可调用的,这些修饰符绝不是阻止CLR甚至其他代码调用代码的安全工具


使用反射,您可以调用类中的每个方法,无论是私有的、内部的还是公共的。您甚至可以将Main()声明为private,它仍然是应用程序的入口点。

编译器将它们标记为“入口点”。CLR可以在一定范围内“随心所欲”。(-II.15.4.1.2,第181页)这显然是一种特殊情况,因为CLR在执行代码时不受相同规则的约束,我假设任何东西都可以通过反射和其他方法在任何地方访问,但在标准代码中都是不可访问的。CLR不是用C编写的,也不受C的规则甚至.NET的规则的约束(除非它必须使程序以预期的语义运行才能发挥作用)。如果是德雷德法官,它将高喊“我是法律”。是C#编译器设置程序集的入口点,CLR只调用它,而不关心它是如何声明的以及它是做什么的。是C#编译器在您忘记编写Main()时抱怨或者有不止一个。当它不是公共的时候,它也可能会抱怨。但他们决定不这样做。出于一个很好的理由,可以说它应该是私有的,因为当其他代码也调用Main()时,不会发生任何好的事情。它们被编译器标记为“entrypoint”。CLR可以在一定范围内“随心所欲”。(-II.15.4.1.2,第181页)这显然是一种特殊情况,因为CLR在执行代码时不受相同规则的约束,我假设任何东西都可以通过反射和其他方法在任何地方访问,但在标准代码中都是不可访问的。CLR不是用C编写的,也不受C的规则甚至.NET的规则的约束(除非它必须使程序以预期的语义运行才能发挥作用)。如果是德雷德法官,它将高喊“我是法律”。是C#编译器设置程序集的入口点,CLR只调用它,而不关心它是如何声明的以及它是做什么的。是C#编译器在您忘记编写Main()时抱怨或者不止一个。当它不是公共的时候,它也是一个可能会抱怨的代码。但是他们决定不这样做。出于一个很好的理由,可以说它应该是私有的,因为当其他代码也调用Main()时,没有什么好事情会发生。