2016-04-01 2 views
0

Опасно ли использовать memystream как личное поле в классе экземпляра?Опасно ли использовать memystream как личное поле

Класс реализует IDisposable:

class MyIDisposableClass:IDisposable{ 
private MemoryStream _stream; 


//do stuff with _stream 


void Dispose(){ 
_stream.Close(); 
_stream.Dispose();//does this statement make sense here ? 
} 
} 

и будет использоваться, как это:

using(MyIDisposableClass() bla=new MyIDisposableClass()) 
{...} 

Это хороший подход, или я должен сделать что-то еще, чтобы дать весь доступ к членам класса к такому роду информации?

+1

Вы, вероятно, хотите реализовать 'Dispose (BOOL)' тоже. https://msdn.microsoft.com/en-us/library/fs2xkftw(v=vs.110).aspx – MickyD

ответ

1

Вы прекрасно до тех пор, пока вы оборачивать ваш объект в использовании

После того, как с помощью блока, расположенного метода объекта будет вызван. Пока вы очищаете все, все будет в порядке.

И если вы беспокоитесь о , когда он будет называться, код здесь покажет вам.

using System; 

public class DisposableExample : IDisposable 
{ 

    public void Dispose() 
    { 
     Console.WriteLine("Disposed"); 
    } 
} 

public class Program 
{ 
    public static void Main() 
    { 
     Console.WriteLine("Before Disposing"); 
     using(var disposableObj = new DisposableExample()) 
     { 
      Console.WriteLine("Inside Using Statement"); 
     } 
     Console.WriteLine("After Disposing"); 
    } 
} 

Это напечатает

Before Disposing 
Inside Using Statement 
Disposed 
After Disposing 

here См скрипку

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