[英]Update: Override method from custom control on user control
早上好。
這是我想要實現的目標。
對於CustomControlA
,我有
public void OverrideableMethod()
{
// some codes here
}
我有UserControlB
。 我想從“越權”的方法CustomControlA
上UserControlB
。 這可能嗎? 如果是,該怎么辦?
我能想到的最好的辦法是在UserControlB
上創建一個同名的方法,然后從那里調用CustomControlA.OverrideableMethod()
。
代碼是這樣的:
public class CustomControlA : CustomControl
{
public virtual void OverrideableMethod()
{
// do something
}
}
public class UserContorlB : System.Web.UI.UserControl
{
protected CustomControlA someVariableForCustomControlA;
// here lies the problem, on how to override CustomControlA.OverrideableMethod() here
// without inheriting CustomControlA itself
}
這就是問題所在。 我想盡可能地避免繼承CustomControlA,原因是允許UserControlB
繼承另一個基類。 在上述情況下,是否有可能重寫CustomControlA.OverrideableMethod()
?
如果UserControlB完全是CustomControlA的子類,則需要使用virtual和override關鍵字來覆蓋子類中的方法。 如果不是,則其不是方法重寫。
public class CustomControlA
{
public virtual void OverrideableMethod()
{
// some codes here
}
}
public class UserControlB: CustomControlA
{
public override void OverrideableMethod()
{
// some codes here
}
}
更新(根據問題的更新部分):不可能進行覆蓋(實際上您甚至沒有嘗試進行覆蓋),但是您可以執行以下操作。 您應該始終調用UserContorlB.OverrideableMethod()
但請確保您具有一些條件,基於此條件將調用正確的方法。
public class CustomControlA
{
public void OverrideableMethod()
{
// do something
}
}
public class UserContorlB : System.Web.UI.UserControl
{
protected CustomControlA someVariableForCustomControlA;
public void OverrideableMethod()
{
if(some condition is true)
{
someVariableForCustomControlA.OverrideableMethod();
}
else
{
// do some logic here
}
}
}
您應該為控件添加代碼以使其清楚。
在以下情況下是可能的,並且順便說一句,您不會從UserControlB調用CustomControlA.OverrideableMethod()。 如果UserControlB繼承了CustomControlA,則該方法存在於UserControlB中:
public class CustomControlA : UserControl
{
public virtual void OverrideableMethod() { /* code the default implementation */ }
}
您的UserControlB將擴展/繼承CustomControlA
public class UserControlB : CustomControlA
{
public override void OverrideableMethod() { /* implement whatever you want */ }
}
如果CustomControlA的方法具有您要執行的代碼以及UserControlB中的NEW代碼,則可以執行以下操作:
public class UserControlB : CustomControlA
{
public override void OverrideableMethod()
{
base.OverrideableMethod();
/*
additional code here
*/
}
}
構建將觸發后代代碼的基類時,繼承方法的最佳做法如下:
public class CustomControlA : UserControl
{
public void OverrideableMethod()
{
//You can code here for things before the overrideable method
OnOverrideableMethod();
//You can code here for things after the overrideable method
}
protected virtual void OnOverrideableMethod() { }
}
public class UserControlB : CustomControlA
{
protected override void OnOverrideableMethod()
{
/* implement here */
}
}
這樣可以防止直接調用“ OnXXXX”方法,並強制調用公共/定義良好的方法。 它使您能夠在“ OnXXX”方法之前和/或之后添加代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.