我正在寫一個ASP.NET母版頁,做了主/詳細編輯(的ValidationSummary,錯誤處理,使用jQuery UI的對話框詳細視圖的彈出式)共同繁重的工作。它具有用於主頁和詳細視圖中的兩個ContentPlaceHolder
控制,主佔位符被預期含有一個GridView
,和細節佔位符或者是DetailsView
或FormView
。ASP.NET FormView控件的DetailsView和多態性
主網頁只需要訪問DetailsView控件的一些基本成員或FormView控件:
- ChangeMode方法
- DataBind方法
- CURRENTMODE財產
- InsertItem方法
- 的updateItem方法
我驚訝地發現,雖然DetailsView和FormView都具有相同的成員,但它們不是(除了DataBind)從一個公共基類或接口繼承的。甚至有兩個等價枚舉FormViewMode
和DetailsViewMode
,以便ChangeMode和CurrentMode成員甚至不具有相同的簽名。
我打算通過創建一個包裝類來避開這一點,但任何人都可以解釋爲什麼他們這樣實現的?我是否試圖通過多態使用它們來存儲麻煩?
我覺得很難相信,這是不是微軟的工程師的故意,所以我只能說,他們打算阻止多態的使用。
我的意思是成員我公開上市(除外DataBind當然)不是從一個公共基類或接口繼承的。 – Joe 2012-02-12 15:54:48
我不相信微軟的工程師們不願意「阻止多態使用」。也許當你嘗試創建你的包裝器的情況下,你會發現他們決定不繼續每一個函數/枚舉的原因。 – 2012-02-12 16:11:33