Я только что попробовал ваш пример кода с делегатом EventHandler вместо Action (так как не смог найти не универсальный делегат Action в пространстве имен System)
Приведенный ниже код работает так, как вы и ожидаете: выводит «Foo foo'd».
Может быть, это делегат Action, хотя я нахожу это несколько странным.
class Program
{
static void Main()
{
Foo foo = new Foo();
foo.Fooing += (object o, EventArgs e) => Console.WriteLine("Foo foo'd");
foo.PleaseRaiseFoo();
}
}
class Foo
{
public event EventHandler Fooing;
protected void OnFooing()
{
if (this.Fooing != null)
this.Fooing(null, null);
}
public void PleaseRaiseFoo()
{
this.OnFooing();
}
}