Должен ли IDataReader :: Dispose вызывать IDataReader :: Close? - PullRequest
3 голосов
/ 16 декабря 2011

Я реализую IDataReader, и мне интересно, должна ли реализация Dispose вызывать Close или нет.

Кроме того, Close должен звонить Dispose?

Я предполагаю, что Close не должен звонить Dispose, а Dispose может звонить Close, так как AFAIK, вы сможете звонить Dispose столько раз, сколько вы хотите любой объект. Но это всего лишь предположение, и я бы лучше услышал мнение эксперта.

Ответы [ 4 ]

6 голосов
/ 16 декабря 2011

Close() и Dispose() должны делать одно и то же (один должен вызывать другой).
Однако Close() не нужно вызывать несколько раз.

Вы должны наследоватьбазовый DbDataReader класс вместо того, чтобы заново реализовывать все это самостоятельно;если это так, вам нужно переопределить абстрактный Close().

1 голос
/ 16 декабря 2011

Они оба почти одно и то же, за исключением того, что Close может быть вызван более 1 раза без исключения.

Если вы используете объект более одного раза, реализуйте .Закройте, если только один раз, реализуйте .Dispose ().

1 голос
/ 16 декабря 2011

.Dispose() должен делать только одно: освобождать неуправляемые ресурсы.Поэтому вы должны вызывать .Close() тогда и только тогда, когда вызов этой функции является правильным способом освобождения неуправляемого ресурса.В этом случае я бы сказал, что это правда (это освободит соединение с базой данных), и поэтому вам следует вызвать функцию.

0 голосов
/ 16 декабря 2011

IDataReader в интерфейсе. Это не диктует реализацию.

...