Megosztás:


delegálási operátor

Az delegate operátor létrehoz egy névtelen metódust, amelyet delegált típussá alakíthat át.

A C# nyelv referenciadokumentuma a C# nyelv legújabb kiadású verzióját ismerteti. Emellett a közelgő nyelvi kiadás nyilvános előzetes verziójú funkcióinak kezdeti dokumentációját is tartalmazza.

A dokumentáció azonosítja azokat a funkciókat, amelyeket először a nyelv utolsó három verziójában vagy az aktuális nyilvános előzetes verziókban vezetnek be.

Jótanács

Ha meg szeretné tudni, hogy mikor jelent meg először egy funkció a C#-ban, tekintse meg a C# nyelvi verzióelőzményeiről szóló cikket.

A névtelen metódusokat átalakíthatja például System.Action és System.Func<TResult>. Számos metódus használja ezeket a típusokat argumentumként.

Func<int, int, int> sum = delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(3, 4));  // output: 7

Megjegyzés:

A Lambda-kifejezések tömörebb és kifejezőbb módot biztosítanak egy névtelen függvény létrehozásához. A => operátorral lambdakifejezést hozhat létre:

Func<int, int, int> sum = (a, b) => a + b;
Console.WriteLine(sum(3, 4));  // output: 7

A lambdakifejezések funkcióiról, például a külső változók rögzítéséről további információt a Lambda-kifejezésekben talál.

Az operátor használatakor delegate kihagyhatja a paraméterlistát. Ha kihagyja a paraméterlistát, létrehoz egy névtelen metódust, amelyet bármilyen paraméterlistával delegált típussá alakíthat át, ahogy az alábbi példa is mutatja:

Action greet = delegate { Console.WriteLine("Hello!"); };
greet();

Action<int, double> introduce = delegate { Console.WriteLine("This is world!"); };
introduce(42, 2.7);

// Output:
// Hello!
// This is world!

Ez a funkció az egyetlen olyan névtelen metódus, amelyet a Lambda-kifejezések nem támogatnak. Minden más esetben használjon lambda kifejezést beágyazott kód írásához. Elvetésekkel megadhat két vagy több bemeneti paramétert egy névtelen metódushoz, amelyet a metódus nem használ:

Func<int, int, int> constant = delegate (int _, int _) { return 42; };
Console.WriteLine(constant(3, 4));  // output: 42

A visszamenőleges kompatibilitás érdekében, ha csak egyetlen paraméter neve van elnevezve _, a fordító a paraméter nevét egy névtelen metóduson belül kezeli _ .

Névtelen metódus deklarálásakor használja a static módosítót:

Func<int, int, int> sum = static delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(10, 4));  // output: 14

A statikus névtelen metódusok nem tudják rögzíteni a helyi változókat vagy a példány állapotát a hatókörökből.

delegate A kulcsszóval deklarálhat deklarált deklarált típust.

A fordító gyorsítótárazza a metóduscsoportból létrehozott delegált objektumot. Fontolja meg a következő módszert:

static void StaticFunction() { }

Amikor hozzárendeli a metóduscsoportot egy meghatalmazotthoz, a fordító gyorsítótárazza a meghatalmazottat:

Action a = StaticFunction;

C# nyelvspecifikáció

További információkért lásd a Névtelen függvénykifejezések szakaszt a C# nyelvi specifikációban.

Lásd még