代码之家  ›  专栏  ›  技术社区  ›  Anand Patel

在asp.net中创建参数化的基本网页

  •  1
  • Anand Patel  · 技术社区  · 16 年前

    我有一个类层次结构,其中IOObject是产品和客户的基类。我想在asp.net中定义一个应该包含通用代码的基页。通用页面显示对象的名称,并允许用户通过请求确认来删除对象。必须针对IOObject类型写入页面。我试图以以下方式定义一个基页,但它给出了一个编译时错误:

    public class BaseDeletePage<T> : System.Web.UI.Page
       where T:IObject
    {
    }
    

    它给出了以下编译错误:“确保此代码文件中定义的类与“inherits”属性匹配,并且它扩展了正确的基类(例如Page或UserControl)”

    一般的问题陈述是:如何定义一个参数化的web页面类,它可以被其他页面用作基类。

    3 回复  |  直到 16 年前
        1
  •  3
  •   Paul Hooper    16 年前

    因为您已经为产品和客户定义了一个IOObject^接口,所以我建议您只需通过属性传递它,而不是给类一个类型参数。

    这就是:

    public class BaseDeletePage : Page {
        public IObject ObjectToBeDeleted { get; set; }
    }
    

    [编辑]乔尔·科霍恩写的是正确的。根本问题是不能实例化BaseDeletePage,因为它不知道t是什么。我的答案是,您根本不需要类型参数。您只需要一个基类,该基类可以处理某个对象,给它一个要删除的对象的引用,并且可以通过属性来完成。

        2
  •  1
  •   Joel Coehoorn    16 年前

    您可以使用asp.net构建通用的基页类,但不能直接实例化它们。你必须给他们一个特定的(专门的)类型。因此,您发布的代码是合法的,但您不能以正常方式直接连接到aspx文件。要使用它,我通常会这样做:

    public class MyDeletePage : BaseDeletePage<IObject>
    {
    }
    

    List<T> 在不告诉编译器“T”是什么的情况下,在告诉编译器(而不仅仅是运行时)该页面的专用类型之前,您不能使用通用asp.net页面。

        3
  •  0
  •   Nathan Taylor    16 年前

    <%@ Page Inherits="BaseDelegatePage<IObject>" %>
    
    推荐文章