Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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.