Как посмотреть, во что разворачивается синтаксический сахар C#?
Везде можно прочитать, что какой-нибудь using
using (FileStream fs = new FileStream(@"C:\tmp\text.txt", FileMode.Open))
{
}
разворачивается в нечто вроде
FileStream fs = new FileStream(@"C:\tmp\text.txt", FileMode.Open);
try
{
}
finally
{
if (fs != null)
((IDisposable)fs).Dispose();
}
А есть ли какие-нибудь способы самому посмотреть, что во что разворачивается? ildasm насколько я понимаю дает уже ассемблер, а это не то, что мне нужно.
Евгений, в общем случае, Roslin (и да и ранние компиляторы) не заморачиваются разверткой именно на исходном языке*. сразу шпарят в il. на сколько мне известно. хотя ссылка от freeExec,** безусловно полезна в контексте вашего вопроса. это действительно интересно. и местами, возможно, даже полезно
upd * в дотнете/шарпе - нет макро, и нет препроцессоров, подобных c/c++. от слова абсолютно нет. хотя я тоже могу чего то не знать. была интересная попытка в nemerle. но он не взлетел ))) upd 2 ** думаю там компиляция + реверс из il, разными инструментами, с разными опциями
Спасибо, хороший сайт. А есть какие-нибудь оффлайн инструменты?
Потому что он, похоже, не все понимает. Допустим, ругается на пространство имен System.Data.SqlClient https://sharplab.io/#v2:CYLg1APgAgTAjAWAFBQAwAIpwH...
freeExec, в данном случае не изменится. Но сам факт того, что редактор не все понимает, в каком-нибудь другом случае может не позволить увидеть преобразованный код. Поэтому я и спросил про альтернативы.
ildasm не дает асемблерный код, он дает IL-код. Довольно таки читабельно, попробуйте
В книге CLR via c# что как работает рассказывается именно через эту прогу