Техника C#для создания анонимных делегатов, использующих одну и ту же переменную замыкания.

У меня возникла ситуация, когда мне нужно сгенерировать несколько похожих анонимных делегатов. Вот пример:

public void Foo(AnotherType theObj)
{
    var shared = (SomeType)null;

    theObj.LoadThing += () =>
    {
        if(shared == null)
            shared = LoadShared();

        return shared.Thing;
    };

    theObj.LoadOtherThing += () =>
    {
        if(shared == null)
            shared = LoadShared();

        return shared.OtherThing;
    };

    // more event handlers here...
}

У меня проблема в том, что мой код не очень СУХОЙ. Содержимое каждого из обработчиков событий ОЧЕНЬ похоже и может быть легко параметризовано в фабричный метод. Единственное, что мешает мне это сделать, это то, что каждый делегат должен делиться ссылкой на переменную shared. Я не могу передать sharedфабричному методу с помощью ключевого слова ref, так как вы не можете создать замыкание вокруг refпеременной . Любые идеи?

6
задан recursive 1 August 2013 в 22:37
поделиться