Enum, коллекция словаря делегатов, где делегат указывает на перегруженный метод - PullRequest
2 голосов
/ 03 апреля 2009

У меня есть общая коллекция (словарь), в которой хранятся перечисление и делегат. Таким образом, если пользователь предоставляет значение перечисления методу в качестве параметра, соответствующий делегат в коллекции будет выполнен.

Этот метод, на который указывает делегат, перегружен. Когда я вызываю метод, как я могу выбрать, какую версию метода выполнять?

Спасибо

Ответы [ 2 ]

3 голосов
/ 03 апреля 2009

Делегат указывает только на одну перегрузку, а не на «группу методов». К тому времени, когда вы получаете делегата в метод, вы уже сделали разрешение перегрузки. Обычно это можно сделать только в компиляторе:

using System;
class Foo {
    int Bar() { return 1; }
    void Bar(int a) { }
    static void Main() {
        Foo foo = new Foo();
        Func<int> myDelegate = foo.Bar; // points to "int Bar()" version
    }
}

Если вопрос касается получения перегруженного метода с помощью отражения - тогда вы можете указать шаблон в аргументах для Type.GetMethod() (как Type[]). Это должно дать вам метод, который вы хотите.

Чтобы получить делегата от MethodInfo, используйте Delegate.CreateDelegate.

0 голосов
/ 03 апреля 2009

Делегат в качестве конкретной подписи. Когда вы создаете экземпляр делегата с методом, который имеет перегрузки, он будет использовать перегрузку, подпись которой лучше всего соответствует подписи делегата.

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