我有一個名爲IStructuredReader
的接口,它從文件中讀取一些結構化數據並將其顯示在表單中。它有一個名爲Sync()
的成員,在實現時會掃描用戶指定數據模式的數據。如何在運行時確定接口成員是否已實現?
IStructuredReader
的某些實現不具有同步功能。那些實現爲Sync()
方法拋出NotImplementedException
。我希望能夠檢查正在實施的這種方法,以便我可以調暗表單上的按鈕,如果不是。
我能想到的一些方法是可以這樣做的所有這一切看起來笨拙和複雜:
分離
Sync
方法變成自己的接口,繼承它爲那些支持的實現能力,並試圖投讀者對象將其識別能力,寫
NotImplementedAttribute
,有了它裝飾構件,並檢查使用反射屬性的存在,將
HasSyncCapability
布爾值屬性添加到接口。
這樣做是否有規範的方式?
我會拋棄#2。如果沒有別的,這只是更多的工作,沒有具體的好處。 – Servy
不支持它的方法可能不做任何事情,而不是拋出? 「Sync」是否需要返回某些內容,或者調用者是否根據是否定義了「Sync」而採取不同的行爲? – Servy
'CanSync'將會是一個更好的名字,並且'TrySync'可能是同步操作的更好選擇。它可能僅僅因爲不可同步而失敗,總是返回'false'。 – Oded