Делегаты с явным указателем "this"? - PullRequest
1 голос
/ 11 июня 2010

Можно ли адаптировать метод, подобный этой функции "F"

class C {
    public void F(int i);
}

делегату как Action<C,int>?

У меня есть смутное воспоминание о том, что Microsoft работала над поддержкой такого рода адаптации. Но, может быть, я ошибаюсь!

Редактировать : Я знаю, что это не компилируется в VS2008:

class C {
    public void F(int i);
    void G() {
        Action<C, int> test = this.F;
    }
}

Мне просто интересно, предоставляет ли MS способ сделать это в BCL или эта функция будет добавлена ​​в будущей версии.

1 Ответ

2 голосов
/ 09 сентября 2010

Возможно, проще всего создать лямбду, которая принимает C и int и вызывает F на C, передавая int:

Action<C, int> test = (c, v) => c.F(v);

Вы также можете создать так называемый открытый делегат для метода экземпляра C.F, в отличие от обычного типа делегата, который «закрыт по параметру экземпляра».Это будет сделано с использованием отражения и метода Delegate.CreateDelegate.Хотя это приведет к более «прямому» делегату, по всей вероятности, это будет сложнее, чем вам требуется.

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