2012-02-12 95 views
1

我正在寫一個ASP.NET母版頁,做了主/詳細編輯(的ValidationSummary,錯誤處理,使用jQuery UI的對話框詳細視圖的彈出式)共同繁重的工作。它具有用於主頁和詳細視圖中的兩個ContentPlaceHolder控制,主佔位符被預期含有一個GridView,和細節佔位符或者是DetailsViewFormViewASP.NET FormView控件的DetailsView和多態性

主網頁只需要訪問DetailsView控件的一些基本成員或FormView控件:

  • ChangeMode方法
  • DataBind方法
  • CURRENTMODE財產
  • InsertItem方法
  • 的updateItem方法

我驚訝地發現,雖然DetailsView和FormView都具有相同的成員,但它們不是(除了DataBind)從一個公共基類或接口繼承的。甚至有兩個等價枚舉FormViewModeDetailsViewMode,以便ChangeMode和CurrentMode成員甚至不具有相同的簽名。

我打算通過創建一個包裝類來避開這一點,但任何人都可以解釋爲什麼他們這樣實現的?我是否試圖通過多態使用它們來存儲麻煩?

我覺得很難相信,這是不是微軟的工程師的故意,所以我只能說,他們打算阻止多態的使用。

回答

0

雖然DetailsView和FormView都具有相同的成員,但它們不是從公共基類或接口繼承的 。

是的,他們是:

DetailsView控件:CompositeDataBoundControl,IDataItemContainer,作INamingContainer,ICallbackContainer,ICallbackEventHandler,IPostBackEventHandler,IPostBackContainer,IDataBoundItemControl,IDataBoundControl,IFieldControl

FormView控件:CompositeDataBoundControl,IDataItemContainer,作INamingContainer,IPostBackEventHandler,IPostBackContainer ,IDataBoundItemControl,IDataBoundControl,IRenderOuterTableControl

+0

我的意思是成員我公開上市(除外DataBind當然)不是從一個公共基類或接口繼承的。 – Joe 2012-02-12 15:54:48

+0

我不相信微軟的工程師們不願意「阻止多態使用」。也許當你嘗試創建你的包裝器的情況下,你會發現他們決定不繼續每一個函數/枚舉的原因。 – 2012-02-12 16:11:33