C # создание делегата и активация - PullRequest
1 голос
/ 28 мая 2010

У меня есть две функции:

double fullFingerPrinting(string location1, string location2, int nGrams)
double AllSubstrings(string location1, string location2, int nGrams)

Я хочу пойти в цикле и активировать каждую функцию по очереди, и после каждой функции я также хочу напечатать название функции, как я могу это сделать?

Ответы [ 2 ]

5 голосов
/ 28 мая 2010
  1. Определите тип делегата, который является общим для ваших функций.
  2. Создайте коллекцию делегатов для ваших функций
  3. Цикл по коллекции, вызов каждого делегата и использование свойства Delegate.Method для получения имени метода.

Пример (отредактирован для отображения делегатов нестатических функций):

class Program
{
    delegate double CommonDelegate(string location1, string location2, int nGrams);

    static void Main(string[] args)
    {
        SomeClass foo = new SomeClass();

        var functions = new CommonDelegate[]
        {
            AllSubstrings,
            FullFingerPrinting,
            foo.OtherMethod
        };

        foreach (var function in functions)
        {
            Console.WriteLine("{0} returned {1}",
                function.Method.Name,
                function("foo", "bar", 42)
            );
        }
    }

    static double AllSubstrings(string location1, string location2, int nGrams)
    {
        // ...
        return 1.0;
    }

    static double FullFingerPrinting(string location1, string location2, int nGrams)
    {
        // ...
        return 2.0;
    }
}

class SomeClass
{
    public double OtherMethod(string location1, string location2, int nGrams)
    {
        // ...
        return 3.0;
    }
}
0 голосов
/ 01 июня 2010

Не уверен, поможет ли это, но я написал делегатам и событиям, которые запускают , что вы можете использовать делегата и прикрепить его к событию, которое, если вы вызываете это событие, вызовет делегаты присоединяются к этому событию, поэтому зацикливание не требуется.

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