Delegaty w języku C# - czym są i do czego mogą nam się przydać

By Patryk - grudnia 01, 2020

 

Wstęp:

Jak wiemy struktura pamięci komputera składa się z wielu segmentów, najważniejszymi z nich jest stos i sterta. Na stosie przechowujemy typy wartościowe np. zmienną typu int, natomiast jeśli zadeklarujemy instancje klasy trafi ona na stertę ponieważ tam przechowuje się wszystkie referencje do obiektów. Podobnie jest z delegatami które również są obiektami.

Definicja:

Delegat - jest to obiekt, które przechowuje referencje do funkcji lub metody wewnątrz danej klasy.  Co bardzo ważne funkcja musi przyjmować te same argumenty i zwracać ten sam typ - tzw. zgodność sygnatury. 

[modyfikator dostępu] delegate typ_zwracany nazwa_delegata [(lista_argumentów)];

Zastosowanie:

Delegaty znajdują najczęściej zastosowanie w zdarzeniach, które implementujemy za ich pomocą. Przykładowo aplikacje WinForm oraz WPF używają zdarzeń a tym samym delegatów.


Prosty przykład:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication3
{
    class Pojazd
    {
        public delegate string Delegat(); 
        private string model, marka;

        public Pojazd(string model, string marka)
        {
            this.model = model;
            this.marka = marka;
        }
        public string WyswietlMarke()
        {
            return marka;
        }
        public string WyswietlModel()
        {
            return model;
        }

    }
    class Program
    {
        static void Main(string[] args)
        {
            Pojazd audi = new Pojazd("Audi", "A4");
            Pojazd.Delegat delegat_ = new Pojazd.Delegat(audi.WyswietlMarke);
            Console.WriteLine(delegat_());

            delegat_ += () =>
            {
                return "Uzycie Wyrazenia Lambda";
            };
 
            Console.WriteLine(delegat_());
 
            delegat_ += new Pojazd.Delegat(audi.WyswietlModel); // Możemy przypisać więcej funkcji, wtedy wszyskie zostaną wywołane w kolejności
 
            Console.WriteLine(delegat_());
            Console.ReadLine();
 
        }

    }
}


Wynik działania programu


  • Udostępnij:

Może jeszcze polubisz

0 komentarze