Dud*_*ord 14 .net c# compiler-construction visual-studio
我一直使用私有和公共方法.但是,我不明白他们为什么工作.创建一个小型Hello World程序:
public class CallPublicHelloWorld
{
public void CallHelloWorld()
{
publicHelloWorld();
privateHelloWorld();
}
private void privateHelloWorld()
{
Console.WriteLine("Hello World");
}
public void publicHelloWorld()
{
Console.WriteLine("Hello World");
}
}
Run Code Online (Sandbox Code Playgroud)
IL为公共方法创建:
IL_0000: nop
IL_0001: ldstr "Hello World"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ret
Run Code Online (Sandbox Code Playgroud)
IL为私有方法创建:
IL_0000: nop
IL_0001: ldstr "Hello World"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ret
Run Code Online (Sandbox Code Playgroud)
它完全相同.
JIT如何区分并验证遵守私人/公共规则?
您从生成的IL中省略了相关的行:
.method private hidebysig instance void privateHelloWorld () cil managed
.method public hidebysig instance void publicHelloWorld () cil managed
Run Code Online (Sandbox Code Playgroud)
这就是它的全部内容.请参阅此Common Type System MSDN页面中的辅助功能部分.
当修改IL以调用私有方法并使用ilasm编译它时,在运行时你会得到:
未处理的异常:System.MethodAccessException:尝试通过方法'Program.Main(System.String [])'访问方法'CallPublicHelloWorld.privateHelloWorld()'失败.
在Program.Main(String [] args)
因此,有是在运行时执行的可访问性检查.
| 归档时间: |
|
| 查看次数: |
274 次 |
| 最近记录: |