编译器使用 try-catch 块生成什么

问题描述 投票:0回答:3

我想知道 CSC 编译器用 TRY-CATCH 块做了什么。例如,编译器将如何处理如下代码?
在编译为 MSIL 之前,编译器是否会将基本代码更改为其他形式的 C# 代码?我可以预览此代码吗?编译器使用 TRY-CATCH 块的规则是什么?

try
{
    int x =45;
    var obj = new MyObject(++x);
    obj.MyMethod(1234, "qwerty");
    short result = x / obj.Function(x);
}
catch(Exception ex)
{
    Console.Writeline(@"Something goes wrong :/");
}
c# .net exception csc
3个回答
4
投票

请参阅此处:http://weblogs.asp.net/kennykerr/archive/2004/09/15/230167.aspx

try-catch 块实际上在 IL 中看起来与在源代码中非常相似。 IL 的具体内容取决于您在源代码中指定的内容;有几个构造,如

.fault
(类似于
finally
,但仅在引发异常时执行),它们没有 C#/VB 等效项,但编译器仍然可以识别“常见”错误处理行代码并将它们放入单个
.fault
块中。


3
投票

1
投票

try - catch 是一个完全在编译时分析的概念,因此不会对运行时产生太大影响。

请查看此链接。它一定会对你有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.