本質上,我有一個DataTableReader
的對象,我正在審查我的代碼,以確保一次性處理的東西確實處置完畢。爲什麼IntelliSense不在DataTableReader上提供Dispose?
DataTableReader
實現IDisposable
,但智能感知似乎並不在它被拾起:
但它確實與其他一次性類工作,如FileStream
:
那麼,什麼給? DataTableReader
IS一次性的,對吧?
本質上,我有一個DataTableReader
的對象,我正在審查我的代碼,以確保一次性處理的東西確實處置完畢。爲什麼IntelliSense不在DataTableReader上提供Dispose?
DataTableReader
實現IDisposable
,但智能感知似乎並不在它被拾起:
但它確實與其他一次性類工作,如FileStream
:
那麼,什麼給? DataTableReader
IS一次性的,對吧?
這是因爲DbDataReader
的Dispose
方法有EditorBrowsableAttribute設置爲從不基本上是告訴VS不顯示它。爲什麼?我不確定。
[EditorBrowsableAttribute(EditorBrowsableState.Never)]
public void Dispose() {
Dispose(true);
}
protected virtual void Dispose(bool disposing) {
if (disposing) {
Close();
}
}
DotPeek揭示本作DbDataReader
,父類DataTableReader的:
[EditorBrowsable(EditorBrowsableState.Never)]
public void Dispose()
所以這就是爲什麼......
它有意隱藏。它從它的基類DbDataReader繼承Dispose()。大多數從它派生出來的類確實有一些東西需要處理,比如SqlDataReader,因爲它包含一個實際的dbase連接。但是DataTableReader不會,DataTable是全部內存。 –
@HansPassant所以DataTableReader的處理是毫無意義的? – MPelletier
它什麼也沒做。很多程序員從來都不知道叫做Dispose(),但我們最終傾向於在SO上聽到他們的聲音。很多程序員更喜歡總是調用Dispose(),因爲他們不知道它做了什麼並且之前被咬了。一些程序員避免寫無意義的代碼。只要不參加第一組,你就永遠不會感到抱歉。 –