[英]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.