#c# #winforms #syntax #user-controls #c#-3.0
#c# #winforms #синтаксис #пользовательские элементы управления #c #-3.0
Вопрос:
У меня есть пользовательский элемент управления, и я хочу, чтобы разработчик, который удаляет пользовательский элемент управления в winform, мог проверять некоторые значения, прежде чем этот пользовательский элемент управления что-то сделает
Я хочу знать, хорош ли мой метод и есть ли лучший способ сделать это?
На самом деле в моем пользовательском элементе управления у меня есть коллекция, List<IValidator>
которая доступна публично, чтобы разработчик мог добавить IValidator
то, что внедрил. Этот интерфейс реализует только bool Validate()
метод.
Пользовательский элемент управления имеет метод с именем, Validate()
который выполняет итерацию по List<IValidator>
коллекции и вызывает метод Validate().
Вот код :
public partial class MyUserControl : UserControl
{
private SqlConnection _connection;
private List<IValidator> _validators;
private void button1_Click(object sender, EventArgs e)
{
Validate();
}
private bool Validate()
{
foreach (IValidator validator in this.Validators)
{
validator.Validate();
}
}
public List<IValidator> Validators
{
get { return _customValidators; }
set { _customValidators = value; }
}
}
И код в winform, в котором размещен пользовательский элемент управления :
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Validator val1 = new Validator();
myUserControl1.Validators.Add(val1);
}
}
public class Validator : IValidator
{
public bool Validate()
{
return true;
}
}
Кстати, я хотел бы знать, можно ли «улучшить» или «упростить» (без реализации интерфейса) синтаксис C # 3 (лямбда и т.д.).
Ответ №1:
private void button1_Click(object sender, EventArgs e)
{
this.Validators.ForEach(v => v.Validate());
}
или даже:
button1.Click = (sender, e) => { this.Validators.ForEach(v => v.Validate()); };