2013-05-22 2 views
1

У меня есть несколько элементов управления, которые наследуют BaseUserControl. BaseUserControl наследует System.Web.UI.UserControl.
Я хочу, чтобы переопределить OnLoad событие, как это:Добавить метод OnLoad для usercontrol

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

Это прекрасно работает, единственная проблема в том, что я должен скопировать этот кусок кода через 3 управления, которые мне не нравятся. (Я не имею доступа к базовому классу, так как она наследуется 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... 

в отдельный метод, но мне было интересно, если есть способ, который позволит нам указать событие переопределения только один раз?

+0

почему бы не создать средний класс SetBoolValueOnLoadContorl: BaseControl и после этого использование MyControl1: SetBoolValueOnLoadContorl, MyControl2: SetBoolValueOnLoadContorl,. ..? – Frank59

ответ

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 
{ 
    ... 
} 
Смежные вопросы