Programování

Jak pracovat s delegáty v C #

Delegát je ukazatel funkce bezpečný pro typ, který může odkazovat na metodu, která má stejný podpis jako delegát. Můžete využít výhod delegátů v C # k implementaci událostí a metod zpětného volání. Delegát vícesměrového vysílání je ten, který může ukazovat na jednu nebo více metod, které mají identické podpisy.

Porozumění delegátům v C #

V podstatě má delegát odkaz na metodu a také na cílový objekt, na který by měla být metoda volána. Delegáti v C # jsou podobní ukazatelům funkcí v C ++, ale C # delegáti jsou typově bezpečné. Metody můžete předat delegátovi jako parametry, aby delegát mohl odkazovat na metodu. Delegáti se používají k definování metod zpětného volání a implementaci zpracování událostí a jsou deklarováni pomocí klíčového slova „delegate“. Můžete deklarovat delegáta, který se může objevit samostatně nebo dokonce vnořený uvnitř třídy.

Při používání delegátů existují tři kroky. Patří mezi ně deklarace, instance a vyvolání.

Podpis delegáta vypadá takto:

delegovat identifikátor typu výsledku ([parametry])

Následující příkaz ukazuje, jak můžete deklarovat delegáta.

public delegate void MyDelegate (text řetězce);

Jak vidíte ve výše uvedeném prohlášení, název delegáta je „MyDelegate“, má návratový typ „void“ a jako argument přijímá objekt řetězce. To znamená, že delegát MyDelegate může ukazovat na metodu, která má identický podpis. Toto je jen deklarace - před použitím delegáta musíte vytvořit instanci. Následující příkaz ukazuje, jak můžete vytvořit instanci výše uvedeného delegáta.

MyDelegate d = nový MyDelegate (ShowText);

Jakmile delegáta deklarujete a vytvoříte jeho instanci, můžete snadno vyvolat metodu, na kterou delegát odkazuje.

d („Ahoj světe ...“);

Zde je d instance delegáta

Můžete také vyvolat metodu, na kterou instance delegáta odkazuje, pomocí metody Invoke () v instanci delegáta, jak je znázorněno níže.

d.Invoke („Hello World ...“);

Pokud máte metodu, která přijímá dvě čísla a chcete je přidat a vrátit součet dvou čísel, můžete použít delegáta k uložení návratové hodnoty metody, jak je znázorněno v níže uvedeném fragmentu kódu.

int výsledek = d (12, 15);

Zde je kompletní seznam kódů pro vaši referenci.

pomocí systému;

delegáti jmenného prostoru

{

public delegate int MyDelegate (int x, int y);

třídní program

    {

static int Sum (int x, int y)

        {

návrat x + y;

        }

static void Main ()

        {

MyDelegate d = nový MyDelegate (součet);

int result = d.Invoke (12, 15);

Console.WriteLine (výsledek);

Console.ReadLine ();

        }

    }

Delegáti v akci v C #

Zde je kompletní výpis kódu.

pomocí systému;

delegáti jmenného prostoru

{

public delegate void MyDelegate (text řetězce);

třídní program

    {

public static void ShowText (text řetězce)

        {

Console.WriteLine (text);

        }

static void Main ()

        {

MyDelegate d = nový MyDelegate (ShowText);

d („Ahoj světe ...“);

Console.ReadLine ();

        }

    }

}

Všimněte si, že můžete instanci delegáta přiřadit více objektů pomocí operátoru +, což z delegáta udělá vícesměrového delegáta. Instance delegáta můžete také kombinovat pomocí statické metody Combine.

Modul runtime interně udržuje seznam (nazývaný také seznam vyvolání), aby provedl více metod. Následující výpis kódu ukazuje, jak můžete použít Combine () metodu ke kombinaci více instancí delegáta.

myDelegate d1 = nový myDelegate (Metoda1);

myDelegate d2 = nový myDelegate (Metoda2);

myDelegate multicastDelegate = (myDelegate) Delegate.Combine (d1, d2);

multicastDelegate.Invoke ();

Delegát, který může odkazovat na více metod, se nazývá delegát vícesměrového vysílání. Všimněte si, že instance delegáta jsou neměnné. Když tedy zkombinujete delegáty nebo odečtete jednu instanci delegáta ze seznamu, vytvoří se nová instance delegáta, která bude představovat aktualizovaný nebo nový seznam cílů nebo metod, které mají být vyvolány.

Multicast delegáti v akci v C #

Následující seznam kódů ilustruje delegáta vícesměrového vysílání. Všimněte si použití instance delegáta: Tady jsme použili operátor + = k přiřazení delegáta k více metodám, které mají identické podpisy.

pomocí systému;

delegáti jmenného prostoru

{

public delegate void MyDelegate ();

třídní program

    {

public static void Metoda1 ()

        {

Console.WriteLine ("Inside Method1 ...");

        }

public static void Metoda2 ()

        {

Console.WriteLine ("Inside Method2 ...");

        }

static void Main ()

        {

MyDelegate d = null;

d + = metoda 1;

d + = metoda 2;

d.Invoke ();

Console.ReadLine ();

        }

    }

}

Delegáti jsou ideální pro implementaci programování řízeného událostmi. Delegát nemusí znát třídu objektu, na který odkazuje. Vše, co potřebuje vědět, je podpis metody, na kterou by směřoval. Správné použití delegátů může podpořit opětovnou použitelnost vašeho kódu a flexibilitu vašich návrhů. Další informace o delegátech najdete v online dokumentaci společnosti Microsoft.

$config[zx-auto] not found$config[zx-overlay] not found