2011-12-16 2 views
2

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

Также, должен Close позвонить Dispose?

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

+0

Я просто заметил, что это интерфейс IDataReader и класс извините SLaks – MethodMan

ответ

6

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

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

-1

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

+1

Почему люди пишут документацию для интерфейсов? – Juan

+0

Ум ... Чтобы документировать их? –

+1

Документируйте, что должно делать их реализация? – Juan

1

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

1

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

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

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