Delegate

Adam Boduch

delegate - słowo kluczowe języka C#

Słowo kluczowe delegate służy do deklarowania tzw. delegatów:

using System;

namespace FooApp
{
    class Program
    {
        delegate void Foo(string Value);

        static void Bar(string Value)
        {
            Console.WriteLine(Value);
        }

        static void Main(string[] args)
        {
            Foo MyFoo = new Foo(Bar);

            MyFoo("Hello World!");
            Console.Read();
        }
    }
}

Więcej informacji na temat delegatów, znajdziesz w osobnym artykule.

Zobacz też:

5 komentarzy

Marooned napisał(a)

Niezbyt rozumiem przykład - funkcja podana jako parametr [niezgodny, bo zwraca void a nie string jakby] zostaje wywołana? Dziwnie nieco..
Dawno i nie prawda ;) Już kumam i nawet używam ;]
Człowiek uczy się przez całe życie w końcu :)

Może i powszechnie stosowane, ale jak ktoś nie wie to stąd się nie dowie.

Ja się chyba spotkałem z terminem "delegatura", ale mogę się mylić czy to było o tym. Natomiast "delegaty" nigdy nie spotkałem.
Co więcej.. chciałem się dowiedzieć więcej na ten temat, a w tym arcie informacji zero :(

Niezbyt rozumiem przykład - funkcja podana jako parametr [niezgodny, bo zwraca void a nie string jakby] zostaje wywołana? Dziwnie nieco..
Póki co myślałem, że delegate stosuje się tylko do deklaracji funkcji anonimowych:

obiekt.zdarzenie += delegate { /* tu cos robimy */ }

Przydatne np. tu:

image.GetThumbnailImage(100, 100, new System.Drawing.Image.GetThumbnailImageAbort(delegate { return true; }), IntPtr.Zero);

Dzięki czemu nie trzeba tworzyć osobnej metody zajmującej niepotrzebnie miejsce:

public bool ThumbnailCallback() { return true; }

i pisać

image.GetThumbnailImage(100, 100, new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback), IntPtr.Zero);

Dziwne? Powszechnie stosowane.

Znowu jakies dziwne tłumaczenie :/ Nie lepiej po prostu nazwać to "delegacje"?