将OnLoad方法添加到usercontrol

时间:2013-05-22 17:04:09

标签: c# asp.net inheritance

我有几个继承BaseUserControl的控件。 BaseUserControl继承System.Web.UI.UserControl 我想覆盖OnLoad这样的事件:

 public partial class MyControl1 : BaseUserControl
    { 
       protected override void OnLoad(EventArgs e)
       {
          this.Value = myCustomService.GetBoolValue();  
          ///More code here...
          base.OnLoad(e);
       }
    }     

这很好用,唯一的问题是我必须将这段代码复制到3个控件上,这是我不喜欢的。 (我无法访问Base类,因为它是由100个控件继承的。)

所以,我的结果目前看起来像这样:

public partial class MyControl2 : BaseUserControl
        { 
           protected override void OnLoad(EventArgs e)
           {
              this.Value = myCustomService.GetBoolValue();  
              ///More code here...
              base.OnLoad(e);
           }
        }      
 public partial class MyControl3 : BaseUserControl
        { 
           protected override void OnLoad(EventArgs e)
           {
              this.Value = myCustomService.GetBoolValue();  
              ///More code here...
              base.OnLoad(e);
           }
        }   

重构这个的好方法是什么?一种方法是提取

 this.Value = myCustomService.GetBoolValue();  
                  ///More code here...   

是一个单独的方法,但我想知道是否有一种方法可以让我们只指定一次覆盖事件?

1 个答案:

答案 0 :(得分:2)

您可以为这些控件共享功能创建一个额外的基类,并使此类继承自BaseUserControl

// Change YourBaseControl by a meaningful name
public partial class YourBaseControl : BaseUserControl 
{ 
    protected override void OnLoad(EventArgs e)
    {   
        this.Value = myCustomService.GetBoolValue();  
        ///More code here...
        base.OnLoad(e);
    }
}   

public partial class MyControl2 : YourBaseControl
{
   ...
}

public partial class MyControl3 : YourBaseControl
{
   ...
}