5

我刚刚通过继承为我的页面创建了一个基类System.Web.UI.Page

public abstract class PageBase : System.Web.UI.Page
{
    ...
}

当我注意到您还可以在 ASP.NET 视图中声明基页时:

<%@ Page Language="C#" CodeFileBaseClass="PageBase.cs" CodeFile="page.aspx.cs"
    Inherits="page" %>

有人可以解释这两种方法的优缺点吗?您什么时候会使用其中一个,或者它们都相同?如果同时使用两者会发生什么?

4

1 回答 1

5

CodeFileBaseClass, CodeFile,Inherits与继承一起工作,而不是代替继承。

例如,指定CodeFile="page.aspx.cs"page.aspx.cs存在将导致:

Parser Error Message: The file '/page.aspx.cs' does not exist.

假设page.aspx.cs存在,指定CodeFileBaseClass="PageBase.cs"PageBase.cs存在将导致:

Parser Error Message: Could not load type 'PageBase.cs'.

另一方面,您可以在PageBase 指定CodeFileBaseClass属性的情况下继承。但是,当从基类引用页面上的控件时,这可能会导致可能的意外行为。

引用Microsoft 的 @Page MSDN 文档

CodeFileBaseClass
指定页面的基类及其关联的代码隐藏类的类型名称。此属性是可选的,但在使用时, CodeFile属性也必须存在。当您想要实现共享场景时使用此属性,您可以在基类中定义公共字段(以及可选的关联事件)以引用网页中声明的控件。由于 ASP.NET 代码生成模型,如果您在基类中定义字段而不使用此属性,则在编译时将为网页中声明的控件生成新的成员定义(在单独的部分类存根中),而你想要的场景将不起作用。但是如果你使用CodeFileBaseClass属性将基类与页面相关联,并使您的部分类(其名称分配给Inherits属性,其源文件由CodeFile属性引用)从基类继承,然后基类中的字段将能够在代码生成后引用页面上的控件。

于 2012-06-07T23:25:20.390 回答