delegate işleci

işleci, delegate temsilci türüne dönüştürülebilen anonim bir yöntem oluşturur. Anonim bir yöntem, birçok yönteme bağımsız değişken olarak kullanılan ve System.Func<TResult> türleri gibi System.Action türlere dönüştürülebilir.

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

Not

Lambda ifadeleri, anonim işlev oluşturmak için daha kısa ve açıklayıcı bir yol sağlar. Lambda ifadesi oluşturmak için => işlecini kullanın:

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

Dış değişkenleri yakalama gibi lambda ifadelerinin özellikleri hakkında daha fazla bilgi için bkz . Lambda ifadeleri.

işlecini delegate kullandığınızda parametre listesini atlayabilirsiniz. Bunu yaparsanız, oluşturulan anonim yöntem, aşağıdaki örnekte gösterildiği gibi herhangi bir parametre listesiyle bir temsilci türüne dönüştürülebilir:

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!

Bu, lambda ifadeleri tarafından desteklenmeyen anonim yöntemlerin tek işlevselliğidir. Diğer tüm durumlarda lambda ifadesi satır içi kod yazmanın tercih edilen bir yoludur. Yöntemi tarafından kullanılmayan anonim bir yöntemin iki veya daha fazla giriş parametresini belirtmek için atmaları kullanabilirsiniz:

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

Geriye dönük uyumluluk için, yalnızca tek bir parametre adlandırılmışsa__, anonim bir yöntem içinde bu parametrenin adı olarak değerlendirilir.

Değiştiriciyi static anonim bir yöntemin bildiriminde kullanabilirsiniz:

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

Statik anonim yöntem, kapsamları kapsayan yerel değişkenleri veya örnek durumunu yakalayamaz.

Bir temsilci türü bildirmek için anahtar sözcüğünü delegate de kullanırsınız.

C# 11'den başlayarak, derleyici bir yöntem grubundan oluşturulan temsilci nesnesini önbelleğe alabilir. Aşağıdaki yöntemi göz önünde bulundurun:

static void StaticFunction() { }

Yöntem grubunu bir temsilciye atadığınızda, derleyici temsilciyi önbelleğe alır:

Action a = StaticFunction;

C# 11'in öncesinde, tek bir temsilci nesnesini yeniden kullanmak için bir lambda ifadesi kullanmanız gerekir:

Action a = () => StaticFunction();

C# dili belirtimi

Daha fazla bilgi için C# dil belirtiminin Anonim işlev ifadeleri bölümüne bakın.

Ayrıca bkz.