Подписка на событие при создании объекта в C#

В C# (.NET 4.5) я хотел бы подписаться на событие во время создания объекта.

конечно, сработало бы следующее:

CheckBox c = new CheckBox();
c.Name = "TheCheckBox";
c.Checked += c_Checked;

но хотите узнать, можно ли сделать что-то вроде:

CheckBox c = new CheckBox() {
    Name = "TheCheckBox",
    Checked += c_Checked
}

редактирование после обсуждения: это для того, чтобы выполнить что-то вроде:

MyUniformGrid.Add(new CheckBox() {
    Name = "TheCheckBox",
    Checked += CheckHandler
});

2 ответов


нет, к сожалению, подписка на события не поддерживается в инициализаторах объектов. Это сделает его действительно просто создать GUIs в некоторых случаях, но нет...

дом на полпути:

Checkbox c = new CheckBox { Name = "TheCheckBox" };
c.Checked += c_Checked;

(в идеале переименования c_Checked к имени, которое на самом деле имеет смысл - я ненавижу VS-сгенерированные имена здесь...)


Если у вас есть контроль над элементами управления, вы всегда можете настроить eventhandler в конструкторе. Что-то вроде:

public class Program
{
    private static void Main(string[] args)
    {
        Checkbox checkbox = new Checkbox(OnChecked);
        checkbox.TriggerChecked();
    }

    private static void OnChecked(object sender, EventArgs args)
    {
        Console.WriteLine("triggered event");
    }
}

public class Checkbox
{
    public event EventHandler<EventArgs> Checked;

    public Checkbox(EventHandler<EventArgs> eventHandler)
    {
        Checked += eventHandler;
    }


    public void TriggerChecked()
    {
        var handler = Checked;
        if (handler != null)
            handler(this, new EventArgs());
    }
}