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