ChangeMonitor 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供一個衍生自訂型別的基底類別,監控快取項目所依賴的資料狀態變化。
public ref class ChangeMonitor abstract : IDisposable
public abstract class ChangeMonitor : IDisposable
type ChangeMonitor = class
interface IDisposable
Public MustInherit Class ChangeMonitor
Implements IDisposable
- 繼承
-
ChangeMonitor
- 衍生
- 實作
備註
此 ChangeMonitor 類別作為衍生監控類別的基底類別,專門用於特定快取實作。 實 ChangeMonitor 例監控快取項目所依賴的資料狀態變化。 例如,該項目可以是檔案或資料實體,其內容會被快取。 若檔案或資料實體更新,相關的快取項目也必須更改。 常見可監控的項目包括資料實體(如資料庫欄位、值、列或資料表)、另一個快取項目,以及檔案和檔案屬性。
依賴性變更是指依賴性狀態的改變。 在典型的快取實作中,當實 ChangeMonitor 例通知快取依賴變更後,快取會執行所需動作,例如使插入的快取條目失效。
衍生 ChangeMonitor 類別可自訂以監控特定資料儲存的相依變更。 例如,檔案系統、實體記憶體或資料庫的快取實作。 該 ChangeMonitor 類別會檢查快取外發生的變更,然後提醒快取已發生變更。
.NET 框架包含以下由 ChangeMonitor 類別衍生的類別:
這些類別各自處理不同類型的相依關係。 例如,派生 FileChangeMonitor 類別監控快取中檔案系統資料(檔案與資料夾)的變更,而快取項目依賴這些資料。
給實施者的注意事項
如果你建立自訂快取實作或衍生的變更監控類型,必須遵守某些指引。 以下清單總結了這些指引。 欲了解更多資訊,請參閱個別方法或特性的文件。
導出類別的建構子必須設定屬性 UniqueId 、開始監控並呼叫 InitializationComplete() 方法,然後方法才會回傳。 若建構子在建構過程中遇到錯誤,必須處置資源,建構子只能在方法被呼叫後InitializationComplete()呼叫超載,Dispose因為Dispose若初始化未完成,過載會拋出InvalidOperationException例外。
如果在初始化完成前監控的資料發生變更,建構子必須先呼叫該 OnChanged(Object) 方法再呼叫 InitializationComplete() 該方法。
在實例化導出 ChangeMonitor 型別後,你必須將該監視器插入自訂 ObjectCache 實作中。 或者如果你已經用完了變更監視器,再呼叫該 Dispose 方法。
實例插入ObjectCache實作後ChangeMonitor,該ObjectCache實例需被處置變更監控器。 即使插入無效且會產生異常, ObjectCache 實作也必須呼叫過 Dispose 載。
在將衍生變更監控器插入快取後,實ObjectCache作必須透過傳遞OnChangedCallback物件來呼叫 NotifyOnChanged(OnChangedCallback)。 此 NotifyOnChanged(OnChangedCallback) 方法只能呼叫一次。 如果相依性已經變更,當被呼叫時NotifyOnChanged(OnChangedCallback),該OnChangedCallback實例會立即被呼叫。 否則,該 OnChangedCallback 實例只會被呼叫一次。 此一次性呼叫發生在 OnChanged(Object) 方法因偵測到變更而 ChangeMonitor 被呼叫時,或 Dispose() 在方法被呼叫時 ChangeMonitor發生,以先發生者為準。
OnChangedCallback實作所提供的ObjectCache實例應移除相關的快取條目,並透過列DependencyChanged舉指定理由。
ChangeMonitor實例可以在快取實作呼叫NotifyOnChanged(OnChangedCallback)方法之前或之後呼叫該OnChanged(Object)方法。 如果OnChanged(Object)方法在被呼叫前NotifyOnChanged(OnChangedCallback)被呼叫,基礎ChangeMonitor實作會通知快取此情況,並在呼叫時NotifyOnChanged(OnChangedCallback)立即觸發回調NotifyOnChanged(OnChangedCallback)。 任何傳遞給方法的OnChanged(Object)狀態資料會被變更監控器保存,並在呼叫該方法時NotifyOnChanged(OnChangedCallback)再傳給NotifyOnChanged(OnChangedCallback)方法。
變更監控者必須實作此 Dispose(Boolean) 方法。 欲了解更多資訊,請參閱 Dispose(Boolean) 方法文件。
Dispose()必須呼叫方法過載才能處理該ChangeMonitor實例。 「處置」的規則如下:
在將項目插入快取之前,呼叫者有責任處理該 ChangeMonitor 實例。
一旦快取項目及其 ChangeMonitor 相關實例被傳遞到快取,快取實作者必須確保 Dispose 該方法被呼叫,即使插入失敗。
當項目及其相關 ChangeMonitor 實例被傳遞到快取後,呼叫者不得丟棄該依賴,因為當 Dispose 呼叫該方法時,呼叫會被視為相依關係已改變。 因此,該 OnChanged(Object) 方法會自動被調用。
考慮這些規則後, Dispose 該方法必須以以下其中一種方式被呼叫:
使用者若決定不將衍生的變更監控實例插入快取,必須呼叫 Dispose() 方法過載。
若實作嘗試將變更監控實例插入物件快取但插入失敗,快取實作需負責呼叫 Dispose() 過載。 當插入嘗試引發異常時,快取實作必須捨棄所有相關的相依性。
若快取條目被移除,快取實作也必須同時處理該相依。
該方法的內部實作OnChanged(Object)會在呼叫一個註冊回NotifyOnChanged(OnChangedCallback)調後自動呼叫該Dispose方法。
注意:事件觸發時自動呼叫處置方法,僅在實例初始化 ChangeMonitor 先前完成時才會發生。
當衍生變更監控器的建構子呼叫該 InitializationComplete() 方法時,如果變更監控器的狀態已經改變(即建構子仍在運作時被監控的狀態已變更),該 InitializationComplete() 方法會自動拋棄變更監控器。
-
HasChanged該屬性設定為 OnChanged(Object) 在
true衍生的變更監控實例呼叫該方法後,無論物件是否OnChangedCallback已被呼叫NotifyOnChanged(OnChangedCallback)該方法。
建構函式
| 名稱 | Description |
|---|---|
| ChangeMonitor() |
初始化 ChangeMonitor 類別的新執行個體。 此建構子由衍生類別中的建構子呼叫,以初始化基底類別。 |
屬性
| 名稱 | Description |
|---|---|
| HasChanged |
會得到一個表示該類別監控 ChangeMonitor 的狀態已經改變的值。 |
| IsDisposed |
會得到一個值,表示該類別的衍生實例 ChangeMonitor 已被處置。 |
| UniqueId |
會得到一個代表類別實例的 ChangeMonitor 值。 |
方法
| 名稱 | Description |
|---|---|
| Dispose() |
釋放目前類別實例 ChangeMonitor 所使用的所有資源。 |
| Dispose(Boolean) |
釋放所有受管理與非受管理資源,以及任何對實 ChangeMonitor 例的引用。 這種過載必須由派生的變更監控類別來實作。 |
| Equals(Object) |
判斷指定的 物件是否等於目前的物件。 (繼承來源 Object) |
| GetHashCode() |
做為預設雜湊函式。 (繼承來源 Object) |
| GetType() |
取得目前實例的 Type。 (繼承來源 Object) |
| InitializationComplete() |
從衍生類別的建構器呼叫,表示初始化已完成。 |
| MemberwiseClone() |
建立目前 Object的淺層複本。 (繼承來源 Object) |
| NotifyOnChanged(OnChangedCallback) |
快取實作者呼叫以註冊回調,並在依賴變更時透過代理通知 ObjectCache 實例 OnChangedCallback 。 |
| OnChanged(Object) |
由衍生類別呼叫,當相依關係改變時觸發事件。 |
| ToString() |
傳回表示目前 物件的字串。 (繼承來源 Object) |
適用於
執行緒安全性
此類型是安全線程。