C # добавление объектов (аналогично делегатам) - PullRequest
5 голосов
/ 30 декабря 2011

Я хочу спросить, можете ли вы сделать что-то похожее на это?

Event += eventInstance;

Событие это класс

Я хочу сделать что-то похожее на делегатов:

Write write1 = new Write(() => Console.WriteLine("Write1"));
Write write2 = new Write(() => Console.WriteLine("Write2"));
Write write3 = new Write(() => Console.WriteLine("Write3"));

Write write = write1 + write2 + write3;
write();

Спасибо.

Ответы [ 3 ]

6 голосов
/ 30 декабря 2011

Перегрузите оператор + и объедините делегатов. Примерно так:

public class Write
{
    private readonly Action _act;

    public Write(Action act)
    {
        _act = act;
    }

    public void Invoke()
    {
        _act();
    }

    public static Write operator +(Write left, Write right)
    {
        //Do appropriate null-checking.
        var del = (Action)Delegate.Combine(left._act, right._act);
        return new Write(del);
    }
}

И используя это так:

Write write1 = new Write(() => Console.WriteLine("Write1"));
Write write2 = new Write(() => Console.WriteLine("Write2"));
Write write3 = new Write(() => Console.WriteLine("Write3"));

Write writeall = write1 + write2 + write3;
writeall.Invoke();

Распечатает

Write1
Write2
Write3
4 голосов
/ 30 декабря 2011

Вам необходимо реализовать оператор перегрузки для вашего класса.

class Write
{
    public static Write operator +(Write w1, Write w2)
    {
        // implementation, must return Write object
    }
}
3 голосов
/ 30 декабря 2011

Да.
Просто создайте operator +.

Ваш класс должен быть неизменным, и вы, вероятно, захотите использовать упрощенный список членов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...