![](/img/trans.png)
[英]How to force inheriting class's method implementation to call base method before invoke own implantation?
[英]How to Execute Base Class's Method Before Implementors's Method?
我有以下頁面
public partial class GenericOfflineCommentary : OfflineFactsheetBase
{
}
其中OfflineFactsheetBase
定義為
public class OfflineFactsheetBase : System.Web.UI.Page
{
public OfflineFactsheetBase()
{
this.Load += new EventHandler(this.Page_Load);
this.PreInit += new EventHandler(this.Page_PreInit);
}
protected void Page_PreInit(object sender, EventArgs e)
{
if (Request.QueryString["data"] != null)
{
this.PageData = StringCompressor.DecompressString(Request.QueryString["data"]);
this.ExtractPageData();
}
}
}
OfflineFactsheetBase
具有以下virtual
方法:
public virtual void ExtractPageData()
{
// get stuff relevant to all pages that impmement OfflineFactsheetBase
}
在所有影響OfflineFactsheetBase的頁面中都實現了該代碼,如下所示:
public partial class GenericOfflineCommentary : OfflineFactsheetBase
{
public override void ExtractPageData()
{
// get stuff relevant to an OfflineCommentary page.
}
}
當前,只有GenericOfflineCommentary
的ExtractPageData()被觸發。 我怎么能修改此先運行OfflineFactsheetBase
的ExtractPageData(),然后GenericOfflineCommentary
的?
編輯:我試圖避免在每個實現者中調用base.ExtractPageData()
。 這可能嗎?
使ExtractPageData
方法成為非虛擬方法,並調用ExtractPageDataInternal
虛擬方法:
public void ExtractPageData()
{
// get stuff relevant to all pages that impmement OfflineFactsheetBase
// base implementation
...
// call derived class implementation
this.ExtractPageDataInternal();
}
protected virtual void ExtractPageDataInternal()
{
// implementation to be defined by derived class
}
派生類將僅覆蓋ExtractPageDataInternal
,而不是ExtractPageData
,因此將始終執行基本實現。
澄清后修訂
public class OfflineFactsheetBase : System.Web.UI.Page
{
public OfflineFactsheetBase ( )
{
this.Load += new EventHandler ( this.Page_Load );
this.PreInit += new EventHandler ( this.Page_PreInit );
}
protected void Page_PreInit ( object sender, EventArgs e )
{
if ( Request.QueryString [ "data" ] != null )
{
this.PageData = StringCompressor.DecompressString ( Request.QueryString [ "data" ] );
this.ExtractPageData ( );
}
}
public void ExtractPageData ( )
{
// get stuff relevant to all pages that implement OfflineFactsheetBase
// ....blah...
InternalExtractPageData ( );
}
// Could be abstract if the class where
protected virtual void InternalExtractPageData ( )
{
// get stuff relevant to all pages that impmement OfflineFactsheetBase
}
}
public partial class GenericOfflineCommentary : OfflineFactsheetBase
{
public override void ExtractPageData ( )
{
// get stuff relevant to an OfflineCommentary page.
}
}
OfflineFactsheetBase是抽象的嗎? 如果是這樣,請使ExtractPageData受保護的抽象並從基礎上的公共方法調用它,請參閱此SO問題和解答
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.