【问题标题】:ASP.NET FormView DetailsView and polymorphismASP.NET FormView DetailsView 和多态性
【发布时间】:2012-02-12 14:35:17
【问题描述】:

我正在编写一个 ASP.NET 母版页,它为主/详细信息编辑(ValidationSummary、错误处理、使用 jQuery-ui 对话框弹出详细视图)执行常见的繁重工作。它有两个用于主视图和详细视图的ContentPlaceHolder 控件,主占位符应包含GridView,详细占位符为DetailsViewFormView

母版页只需要访问DetailsView或FormView的几个基本成员:

  • ChangeMode 方法
  • 数据绑定方法
  • CurrentMode 属性
  • InsertItem 方法
  • UpdateItem 方法

我很惊讶地发现,虽然 DetailsView 和 FormView 都具有这些相同的成员,但它们不是(DataBind 除外)继承自公共基类或接口。甚至还有两个等效的枚举 FormViewModeDetailsViewMode,因此 ChangeMode 和 CurrentMode 成员甚至没有相同的签名。

我打算通过创建一个包装类来解决这个问题,但是任何人都可以解释为什么它们是这样实现的吗?我是否通过尝试以多态方式使用它们来积蓄麻烦?

我很难相信这不是微软工程师故意的,所以我只能得出结论,他们打算阻止多态的使用。

【问题讨论】:

    标签: asp.net .net detailsview formview


    【解决方案1】:

    虽然 DetailsView 和 FormView 都有这些相同的成员,但它们是 不是从公共基类或接口继承的。

    是的,他们是:

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

    FormView : CompositeDataBoundControl、IDataItemContainer、INamingContainer、IPostBackEventHandler、IPostBackContainer、IDataBoundItemControl、IDataBoundControl、IRenderOuterTableControl

    【讨论】:

    • 我的意思是我列出的成员(当然 DataBind 除外)不是从公共基类或接口继承的。
    • 我不相信微软工程师会“反对使用多态”。也许当您尝试创建包装案例时,您会发现他们决定不继承每个函数/枚举的原因。
    猜你喜欢
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 2014-02-07
    • 1970-01-01
    相关资源
    最近更新 更多