Использование С# с использованием ключевого слова в пользовательском классе

Всем известно, что ключевое слово using используется, когда мы хотим очистить неуправляемые ресурсы.

Если класс реализует IDisposable, мы можем использовать ключевое слово using с объектом этого класса. Но если я хочу использовать ключевое слово using с объектом моего собственного класса, то как я могу его использовать.

Если бы мне пришлось реализовать IDisposable в моем собственном классе, я должен был бы также написать код для его метода Dispose() в своем классе. Тогда нет смысла использовать здесь ключевое слово using, когда я пишу свой собственный код в методе Dispose(). Тогда как я могу использовать использование в пользовательском типе (например, в классах и структурах).

Пожалуйста, объясните на каком-нибудь примере.


person Puneet Pant    schedule 02.02.2013    source источник
comment
Меньше народных голосов. Это просто кривая обучения для некоторых людей!   -  person Tim B James    schedule 02.02.2013
comment
так много для помощи друг другу. Интересно, что 6 отрицательных голосов много добавляют ...   -  person bas    schedule 02.02.2013
comment
В вопросе нет ничего плохого. Я не понимаю отрицательных голосов.   -  person Sina Iravanian    schedule 02.02.2013
comment
Я не буду приводить пример, вам лучше просто прочитать эту статью. Правильная реализация IDisposable и шаблона Dispose - на сайте Code Project.   -  person Tim B James    schedule 02.02.2013


Ответы (3)


Смысл ключевого слова using в том, что оно вызывает Dispose() для экземпляра вашего класса, поэтому вам не нужно писать myDisposableObject.Dispose() самостоятельно, когда вы закончите его использовать. Это не поможет вам написать этот метод — вам все равно придется написать его самостоятельно, чтобы сообщить платформе, как именно вы хотите, чтобы ваши неуправляемые ресурсы были утилизированы.

Я не уверен, какой пример вы ищете, поскольку вы явно знаете, как реализовать интерфейс IDisposable и его метод Dispose(). Все, что я могу здесь сказать, это то, что если у вас нет неуправляемых ресурсов для удаления (или членов, которые сами являются IDisposable), то не реализуйте IDisposable и не используйте using. Это ключевое слово зарезервировано только для удобного использования вещей, которые делают с неуправляемыми ресурсами, которые в противном случае потребовали бы ручной очистки.

person BoltClock    schedule 02.02.2013
comment
Чтобы было ясно, классы также могут реализовывать IDisposable, если они содержат другие управляемые ресурсы, которые являются IDisposable (например, таймер, поток и т. д.). - person Eren Ersönmez; 02.02.2013
comment
@Эрен Эрсонмез: Ах, да. Я обновил свой ответ. - person BoltClock; 02.02.2013
comment
Обратите внимание, что using не просто вызывает Dispose(), он помещает его в блок finally и добавляет проверку нуля. - person antonijn; 02.02.2013

Смысл using не в том, чтобы избавить вас от реализации IDisposable.

Смысл using состоит в том, чтобы позволить вам убедиться, что объект будет правильно удален, когда поток выходит из блока либо нормально, либо из-за исключения.

person Theodoros Chatzigiannakis    schedule 02.02.2013

Оператор using вызывает метод Dispose используемого объекта после завершения блока. См. это, чтобы увидеть, как компилируется используемый блок.

Однако вы несете ответственность за реализацию метода Dipose, в котором вы должны освободить ресурсы, занятые объектом.

person Sina Iravanian    schedule 02.02.2013