// 基底頁面
public class BasePage : System.Web.UI.Page
{
public int HotelID { get { return 1; } }
}
// 衍生頁面
public partial class DerivedPage : BasePage
{
public new int HotelID { get { return 0; } } // 隱藏基底成員
}
在 .aspx 頁面撰寫 <%= base.HotelID %>,預期輸出 1,實際卻輸出 0。
ASP.NET 頁面編譯產生的類別繼承自 DerivedPage,內嵌程式碼區塊 (<% ... %>) 執行時的 this 指向該頁面類別實例。base.HotelID 在編譯時期被解析為 ((BasePage)this).HotelID,但因 DerivedPage 以 new 關鍵字隱藏了 HotelID,且 HotelID 非 virtual,呼叫仍會解析到衍生類別的實作,導致回傳 0。
BaseHotelID、HotelID)。<%= ((BasePage)this).HotelID %> 可正確取得基底實作值 1。virtual,衍生 override,則多型運作正常。盡量避免在 .aspx 內嵌程式碼區塊存取基底成員,改由後端 Code-behind 屬性包裝後再由前端呼叫,維護性更佳。