2015-10-30 89 views
2

你好我想從我的項目中繼承一個對象,但我找不到方法 我的頁面是;如何從繼承訪問對象

public partial class siteler_page : siteDynamic 
{ 
    public static string pageType = "contentpage"; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
} 

而且主類是; (我要訪問onpreinit是pageType爲何放慢參數)

public class siteDynamic : System.Web.UI.Page 
{ 

    public siteDynamic() 
    { 
     // 
     // TODO: Add constructor logic here 
     // 
    } 
    protected override void OnPreInit(EventArgs e) 
    { 

    // I want to access the pageType in here 

     base.OnPreInit(e); 
    } 
} 

任何幫助表示讚賞,thans

回答

1

一種方式做到這一點是定義抽象屬性,讓子類覆蓋它(siteDynamic應該是一個abstract類):

public abstract class siteDynamic : System.Web.UI.Page 
{ 
    public siteDynamic() 
    { 
     // ... 
    } 

    public abstract string PageType { get; } 

    protected override void OnPreInit(EventArgs e) 
    { 
      string type = this.PageType; 

      // ... 

      base.OnPreInit(e); 
    } 
} 

public partial class siteler_page : siteDynamic 
{ 
    public override string PageType 
    { 
      get 
      { 
       return "contentpage"; 
      } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
      // ... 
    } 
} 
+0

THX,我想你的意見,但它給人錯誤「siteDynamic.PageType.get」是抽象的,但它包含在非抽象類「siteDynamic」 – slayer35

+0

@ slayer35更新我的答案。你的父類應該是'abstract'來定義'abstract'成員。 –

+0

謝謝:)你的解決方案工作得很好 – slayer35

1

這是行不通的,因爲你的父類siteDynamic稱爲你的子類siteler_page之前首先進行初始化。至少這是你如何設置它。爲了這個工作集你的父類應該在父類中有一個屬性,然後重寫基類方法並在那裏設置值。

public abstract class siteDynamic : System.Web.UI.Page 
{ 
    public string PageType { get; set; } 

protected override void OnPreInit(EventArgs e) 
{ 
    base.OnPreInit(e); 
} 
} 

public partial class siteler_page : siteDynamic 
{ 

protected void Page_Load(object sender, EventArgs e) 
{ 
} 

protected override void OnPreInit(EventArgs e) 
{ 
    base.PageType = "contentpage"; 
    base.OnPreInit(e); 
} 
} 
+0

你可以看看馬蒂亞斯的解決方案對我來說效果很好,謝謝 – slayer35