ASP.NET CodeFileBaseClass属性与从System.Web.UI.Page继承

时间:2012-06-07 00:01:44

标签: asp.net inheritance base-class

我刚刚从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" %>

有人能解释一种方法的优点和缺点是什么吗?你什么时候使用一个,或者它们都是一样的?如果你同时使用两者会怎么样?

1 个答案:

答案 0 :(得分:4)

CodeFileBaseClassCodeFileInherits与继承一起使用,而不是继承。

例如,指定不存在CodeFile="page.aspx.cs"的{​​{1}}将导致:

page.aspx.cs

假设存在Parser Error Message: The file '/page.aspx.cs' does not exist. ,则指定不存在page.aspx.cs的{​​{1}}将导致:

CodeFileBaseClass="PageBase.cs"

另一方面,您可以继承PageBase.cs 而不指定Parser Error Message: Could not load type 'PageBase.cs'. 属性。但是,当从基类引用页面上的控件时,这可能会导致意外行为。

引用Microsoft's @Page MSDN Documentation

  

CodeFileBaseClass
  指定页面的基类的类型名称及其关联的代码隐藏类。这个属性是可选的,但是当它被使用时    CodeFile 属性也必须存在。如果要实现共享方案,请在此处定义common,请使用此属性   基类中的字段(以及可选的关联事件)   引用网页中声明的控件。因为ASP.NET   代码生成模型,如果您在基类中定义了字段   不使用此属性,在编译时新成员定义   将为网页中声明的控件生成(在一个   单独的部分类存根),你想要的方案不会   工作。但是,如果您使用 CodeFileBaseClass 属性进行关联   带有页面的基类,然后你创建你的部分类(它的   name被分配给 Inherits 属性,其源文件是   由 CodeFile 属性引用)继承自基类,   然后基类中的字段将能够引用   代码生成后页面上的控件。