|
}
}
Хотя это является замечательными примером "безопасного программирования", истина состоит в том, что очень немногих разработчиков прельщает перспектива заключать каждый очищаемый тип в блок try/finally лишь для того, чтобы гарантировать вызов метода Dispose(). Для достижения аналогичного результата, но гораздо менее громоздким образом, в С# поддерживается специальный фрагмент синтаксиса, который выглядит следующим образом:
static void Main(string [ ] args)
{
// Метод Dispose() вызывается автоматически
// при выходе за пределы области действия using.
using(MyResourceWrapper rw = new MyResourceWrapper ())
{
// Использование объекта rw
}
}
Метод Main:
static void Main(string [ ] args)
{
// Метод Dispose() вызывается автоматически
// при выходе за пределы области действия using.
using(MyResourceWrapper rw = new MyResourceWrapper())
{
// Использование объекта rw.
}
}
Если теперь просмотреть CIL -код этого метода Main() с помощью утилиты ildasm.ехе, то обнаружится, что синтаксис using в таких случаях на самом деле расширяется до логики try/finally, которая включает в себя и ожидаемый вызов Dispose():
.method private hidebysig static void Main(string [ ] args) cil managed
{
............
Try
{
} // end.try
Finally
{
..........
Дата добавления: 2015-07-25; просмотров: 46 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Описание процесса финализации | | | Взаимодействие со сборщиком мусора |