Я хочу реорганизовать следующий рекурсивный метод:
public static void Initialize(Control control, DocumentContainer container, ErrorProvider provider)
{
if (control == null)
{
return;
}
var controlWithTextBase = control as ICustomControlWithText;
if (controlWithTextBase != null)
{
controlWithTextBase.DocumentLoaded = true;
controlWithTextBase.Initialize(container, provider);
}
var custom = control as CustomCheckbox;
if (custom != null)
{
custom.DocumentLoaded = true;
custom.Initialize(container);
}
foreach (Control subControl in control.Controls)
{
Initialize(subControl, container, provider);
}
}
public interface ICustomControlWithText : ICustomControl
{
void Initialize(DocumentContainer container, ErrorProvider provider);
void InitializeValidations();
string Text { get; set; }
ErrorProvider ErrorProvider { get; set; }
List<IValidation> Validations { get; set; }
}
public interface ICustomControl
{
void Clear();
FieldType FieldType { get; set; }
bool DocumentLoaded { get; set; }
}
class CustomCheckbox : CheckBox, ICustomControl
{
public void Initialize(DocumentContainer container)
{
//...
}
}
Как вы можете видеть, зависит от типа управления winforms, этот код инициализирует элемент управления. Он начинается с основной формы и содержит пользовательские элементы управления (IControlWithText, CustomCheckbox) и формы winforms по умолчанию. Я бы создал 3 Инициализатора и каждый метод CanInitialize в зависимости от типа элемента управления, но даже тогда я понятия не имею, как пропустить те "ifs", которые мне нужно знать, если мне нужно отправить этот ErrorProvider в метод Инициализировать.
Буду очень признателен вам за помощь!