2010-04-14 2 views
8

Предположим, у меня есть метод, как так:.NET/C# - Располагая объект с «помощью» заявления

public byte[] GetThoseBytes() 
{ 
    using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) 
    { 
     ms.WriteByte(1); 
     ms.WriteByte(2); 
     return ms.ToArray(); 
    } 
} 

ли это по-прежнему распоряжаться объект 'мс? У меня возникают сомнения, возможно, потому что что-то возвращается до завершения блока оператора.

Спасибо, AJ.

ответ

11

Да. using (x = e) { s } является сахаром для { x = e; try { s } finally { x.Dispose(); } }

+1

И возврат внутри тела try..first будет выполнять предложение finally до того, как на самом деле произойдет возврат. – dthorpe

+0

@dthorpe: Умм, да. Упс :) –

4

Да, Using creates a try..finally block, поэтому он располагает мс (и даже выполняет нулевую проверку в случае, если вы установили ns в null).

+1

(Просто проигнорируйте эту глупость о том, что «CLR преобразует ваш код в MSIL» в этой статье) –

4

Да, вся идея оператора Using заключается в том, что он автоматически использует любой поток/объект, который вы используете. красиво сделано.

Смежные вопросы