Delegate как вынести в функцию
От: Аноним  
Дата: 12.09.11 15:24
Оценка:
Цель вызвать метод один раз и потом удалить это из списка вызовов. Ситуация примерно такая:
public class Test {
    public delegate void Handler();
    public Handler OnClose;
    public void test() { /* 1 */
        Handler helper=null;
        var f=new Form(); f.Show(); // для примера
        helper=()=> { f.Close(); OnClose-=helper; }
        OnClose+=h;
    }
}


Хочется получить примерно следующее
public static class HandlerExt {
    public static void Once(this Handler handler,Handler action) {
        Handler helper=null;
        helper=()=> { handler-=helper; action(); };
        handler+=helper;
    }
}
...
OnClose.Once(()=>{ some_action }); /* 2 */
...


К сожалению конструкция /*2*/ не работает так как C# передаёт копии делегатов а не ссылки на них.
Конструкция /*1*/ хоть и работает но очень громоздкая. Нельзя ли как-нибудь конструкцию /*1*/ обернуть в функцию что бы упростить синтаксис?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.