Junior
Mis on delegaadid C#-s ja milleks neid kasutatakse?
sobes.tech AI
Vastus AI-lt
C#-s on delegaadid tüüpi turvalised meetodiviitajad. Nad kapseldavad meetodi, võimaldades seda edastada parameetrina või kasutada muutujatüüpi.
Kasutatakse:
- Jälgimismustri (Observer) rakendamine: C#-i sündmused põhinevad delegaatidel. Toimetaja teavitab tellijaid, kutsudes välja delegaadi.
- Tagasikutsed (Callbacks): Meetodi edastamine funktsiooni argumentina, mis seda hiljem kutsub.
- Üldine programmeerimine:
ActionjaFuncdelegaadid võimaldavad luua üldiseid meetodeid, mis töötavad erinevate signatuuridega. - Paralleelne ja asünkroonne programmeerimine: Meetodid, mis täidetakse teistes voogudes või asünkroonselt, edastatakse sageli delegaatide kaudu.
- LİNQ: LINQ operaatorid kasutavad aktiivselt delegaate filtritingimuste, teisenduste jms määratlemiseks.
Delegaadi deklaratsioon ja kasutamise näide:
// Deklaratsioon void signatuuriga ja ühe int argumendiga
public delegate void MyDelegate(int x);
public class MyClass
{
public void PrintNumber(int num)
{
Console.WriteLine($"Number: {num}");
}
public static void Main(string[] args)
{
// Delegaadile viitava näite loomine, mis osutab PrintNumber meetodile
MyDelegate del = new MyDelegate(new MyClass().PrintNumber);
// Meetodi kutsumine delegaadiga
del(10);
}
}
Näide Action-iga (void meetodid):
using System;
public class OtherClass
{
public void ExecuteAction(Action action)
{
action(); // täidame edastatud delegaadi
}
public static void Main(string[] args)
{
Action myAction = () => Console.WriteLine("Tere Action-ist!");
new OtherClass().ExecuteAction(myAction);
}
}
Näide Func-iga (meetodid tagastatava väärtusega):
using System;
public class ThirdClass
{
public int Calculate(Func<int, int, int> operation, int a, int b)
{
return operation(a, b); // täidame edastatud operatsiooni ja tagastame tulemuse
}
public static void Main(string[] args)
{
Func<int, int, int> add = (x, y) => x + y;
int result = new ThirdClass().Calculate(add, 5, 3);
Console.WriteLine($"Summa tulemus: {result}");
}
}