Dan*_* T. 5 asp.net inheritance base-class
我刚刚通过继承为我的页面创建了一个基类System.Web.UI.Page
:
public abstract class PageBase : System.Web.UI.Page
{
...
}
Run Code Online (Sandbox Code Playgroud)
当我注意到您还可以在 ASP.NET 视图中声明一个基页时:
<%@ Page Language="C#" CodeFileBaseClass="PageBase.cs" CodeFile="page.aspx.cs"
Inherits="page" %>
Run Code Online (Sandbox Code Playgroud)
有人可以解释这两种方法的优缺点吗?你什么时候会使用一个而不是另一个,或者它们都是一样的?如果同时使用两者会怎样?
CodeFileBaseClass
, CodeFile
,Inherits
与继承一起工作,而不是代替继承。
例如,指定CodeFile="page.aspx.cs"
不page.aspx.cs
存在将导致:
Parser Error Message: The file '/page.aspx.cs' does not exist.
Run Code Online (Sandbox Code Playgroud)
假设page.aspx.cs
存在,指定CodeFileBaseClass="PageBase.cs"
不PageBase.cs
存在将导致:
Parser Error Message: Could not load type 'PageBase.cs'.
Run Code Online (Sandbox Code Playgroud)
另一方面,您可以PageBase
从不指定CodeFileBaseClass
属性的情况下继承。然而,当从基类引用页面上的控件时,这可能会导致可能的意外行为。
CodeFileBaseClass
为页面及其关联的代码隐藏类指定基类的类型名称。此属性是可选的,但在使用时, CodeFile属性也必须存在。当您想要实现共享方案时使用此属性,在该方案中您在基类中定义公共字段(以及可选的关联事件)以引用在网页中声明的控件。由于 ASP.NET 代码生成模型,如果您在基类中定义字段而不使用此属性,则在编译时将为网页中声明的控件生成新的成员定义(在单独的部分类存根中),并且您想要的场景不起作用。但是如果你使用CodeFileBaseClass属性将基类与页面相关联,并且您使分部类(其名称分配给Inherits属性,其源文件由CodeFile属性引用)继承自基类,则基类中的字段将能够在代码生成后引用页面上的控件。
归档时间: |
|
查看次数: |
5714 次 |
最近记录: |