C#中Main方法的默认访问说明符是什么?
如果static void Main()的默认访问说明符是私有的,那么外部实体(如OS)如何调用此方法?
任何外部进程都不应该能够调用此方法。
C#中Main方法的默认访问说明符是什么?
所有方法的默认访问说明符是private
。
那么,像操作系统这样的外部实体是如何调用这种方法的呢?
事实并非如此。主方法由CLR调用。由于CLR是强制隐私语义的东西,它可以忽略它。
但这实际上不是正确的答案。正确的答案是说,你的问题表明你对"私有"适用于什么有一个常见但不正确的想法。"私有"并不意味着"不能从外部实体调用此方法"。
相反,访问修饰符应用于事物的名称。也就是说,访问修饰符确定了事物名称的可访问域:它确定了名称可能表示所讨论事物的代码区域。private
修饰符的意思是"此实体的可访问域是声明它的类型的整个主体"。任何在该可访问性域之外查找该名称的尝试都不会导致名称解析选择实体。名称解析将选择其他内容,或者名称解析将失败。
通过其他机制调用私有方法是完全可能的。您可以将其委托给它并将其传递给其他人。如果你足够信任,你可以使用私人反思。等等。主方法的调用就是这样一种机制;它一开始就不按名称查找Main
!
首先,OS对您的Main
一无所知。
CLR(调用Main
)可以调用它,无论您为它指定了什么访问级别(internal
、private
、protected
、public
)。您甚至可以使用反射来查看和调用/使用外部库中的所有方法/类型/接口(是的,还有internal
和private
)。
它的默认访问说明符是私有的,尽管它也可以是公共的或内部的。来自msdn:http://msdn.microsoft.com/zh-cn/library/acy3edy3此外,我们还想知道为什么外部调用私有方法。我认为,C#中定义的访问级别(public、internal、protected、private)只是受到编译器的限制,这对IDE和开发人员来说是一条严格的规则,但对于CLR和OS来说,他们不必遵守这个规则,他们可以从反射地址调用任何函数或方法,就像我们可以通过反射调用方法一样,所以private Main方法可以是入口。