C# делегируют для двух методов с различными параметрами

Я попробовал несколько решений, но его единственный, который действительно работал для меня во всех браузерах

let newTab = window.open(); newTab.location.href = url;

16
задан alexandrul 18 December 2008 в 08:36
поделиться

3 ответа

Абсолютно можно смешать делегатов с дженериками. В 2,0, Predicate<T> и т.д. хорошие примеры этого, но у Вас должно быть то же количество args. В этом сценарии возможно, опция состоит в том, чтобы использовать получения для включения args в делегата?

т.е.

    public delegate void Action();
    static void Main()
    {
        DoStuff(delegate {Foo(5);});
        DoStuff(delegate {Bar("abc","def");});
    }
    static void DoStuff(Action action)
    {
        action();
    }
    static void Foo(int i)
    {
        Console.WriteLine(i);
    }
    static void Bar(string s, string t)
    {
        Console.WriteLine(s+t);
    }

Примечание, которое Action определяется для Вас в.NET 3.5, но можно повторно объявить это в 2,0 целях; Примечание-p

, что анонимный метод (delegate {...}) может также быть параметризован:

    static void Main()
    {
        DoStuff(delegate (string s) {Foo(5);});
        DoStuff(delegate (string s) {Bar(s,"def");});
    }
    static void DoStuff(Action<string> action)
    {
        action("abc");
    }
    static void Foo(int i)
    {
        Console.WriteLine(i);
    }
    static void Bar(string s, string t)
    {
        Console.WriteLine(s+t);
    }

Наконец, C# 3.0 делает это все намного легче и более симпатичным с "лямбдами", но это - другая тема;-p

19
ответ дан 30 November 2019 в 21:29
поделиться

Да, возможно объединить дженерики с делегатами.

public delegate void Action<T>(T x);
public delegate void Action<T,U>(T x, U y);

public void UsingMutex<T>(Action<T> x, T t) {
    // acquire mutex...
    x(t);
    // release mutex...
}
public void UsingMutex<T,U>(Action<T,U> x, T t, U u) {
    // acquire mutex...
    x(t, u);
    // release mutex...
}

, Но все еще необходимо обработать другое количество параметров с помощью перегрузок.

4
ответ дан 30 November 2019 в 21:29
поделиться

Если Вы посмотрите Func<T> и Action<T> делегаты в платформе, то Вы будете видеть, что они определяют много подобных делегатов с другим количеством параметров. Можно использовать дженерики, но это не решает количество проблемы аргументов, о которой Вы говорите.

3
ответ дан 30 November 2019 в 21:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: