假設您正在編寫一個庫以在屏幕上顯示內容,則創建一個IDisplayable
接口。該接口有一種方法可以從對象創建控件:displayable.GetControl()
。僅適用於某些類型參數的方法的通用類
你想創建你自己的可以顯示的列表類型:MyList<T>
。現在這個列表只能在T
是IDisplayable
時顯示,所以你可以在MyList類中詢問T應該實現IDisplayable。但是,當T不是IDisplayable時,你也希望在某些地方使用這種列表類型(並且因此這個列表將不可顯示)。那麼如果T實現了IDisplayable,那麼有可能說MyList實現了IDisplayable?我也會很高興,如果MyList<T>
總是實現IDisplayable,但在運行時拋出異常,如果你嘗試調用GetControl()
如果T不是IDisplayable,但我想知道是否有靜態類型安全的方法來做到這一點。這可以做到嗎?或者我正在尋找錯誤的解決方案?
編輯:
我的建議同意迄今是MYLIST可能有太多的責任。我最初的想法是創建一個MyDisplayableList<T> : MyList<T> (where T : IDisplayable)
。
這種方法的問題是,我有很多采用MyList並返回MyList的方法(例如像Linq中的Select方法)。所以,如果我在MyDisplayableList上使用select,我會返回一個MyList,並且它們即使它是MyList也無法顯示它...是否有一種在C#中處理此問題的安全方法?
爲什麼你也想用MYLIST非顯示班?在我看來,你要求MyList 做太多事情,但沒有理由很難說。 –
2009-08-29 17:58:06