Поэтому я хочу сохранить многоадресное действие в классе и передать ему методы, вызываемые из метода класса, который изменяет частный объект действия класса:
public class Bar;
public class Xzxxy
{
public delegate void BarDelegate(Bar bar);
private Action<Bar> BarAction;
public void Add(BarDelegate bd)
{
BarAction += bd;
}
public void Invoke(Bar bar)
{
BarAction.Invoke(bar);
}
}
Это не работает, потому что в Xzxxy.Add строке BarAction += bd; есть следующая ошибка
Невозможно неявно преобразовать
Xzzzy.BarDelegateвSystem.Action<Bar>.
Как мне объявить BarDelegate, чтобы получить желаемое поведение?





Вот одно решение
public void Add(BarDelegate bd)
{
BarAction += (bar)=>bd(bar);
}
или лучше передать Action<Bar> в метод Add
public void Add(Action<Bar> bd)
{
BarAction += bd;
}
Определение BarDelegate бесполезно и избыточно... потому что Action<Bar> — это делегат, который принимает класс Bar в качестве параметра и возвращает void, для этого не нужно определять новый делегат!
Слишком просто. :) .... :)