Func, System namespace altında bulunan geriye değer döndüren generic bir delegatedir. Sıfır veya daha fazla giriş parametresine ve bir çıkış parametresine sahiptir. Son parametre çıkış parametresi olarak kabul edilir.
Bir giriş parametresi ve bir çıkış parametresi alan Func delegate’i, aşağıda gösterildiği gibi System namespace alanında tanımlanır:
namespace System
{
public delegate TResult Func<in T, out TResult>(T arg);
}
Aşağıdaki şekilde gösterildiği gibi, köşeli parantezler <> içindeki son parametre dönüş tipi olarak kabul edilir ve geri kalan parametreler giriş parametresi tipleri olarak kabul edilir.
İki giriş parametresi ve bir çıkış parametresi olan bir Func delegate aşağıda gösterildiği gibi temsil edilecektir.
Aşağıdaki Func delegate, int türünde iki giriş parametresi alır ve int türünde bir değer döndürür:
Func<int, int, int> sum;
Yukarıdaki func delegate’ine int parametresi alan ve bir int değeri döndüren herhangi bir metodu atayabilirsiniz.
class Program
{
static int Sum(int x, int y)
{
return x + y;
}
static void Main(string[] args)
{
Func<int,int, int> add = Sum;
int result = add(10, 10);
Console.WriteLine(result);
}
}
Sonuç:
20
Bir Func delegate türü, farklı türlerde 0 ila 16 arası giriş parametresi içerebilir. Ancak, sonuç için bir out parametresi içermelidir. Örneğin, aşağıdaki Func temsilcisi herhangi bir giriş parametresine sahip değildir ve yalnızca bir çıkış parametresi içerir.
Func<int> getRandomNumber;
C# Anonymous (Anonim) Metot ile Func Kullanımı
Delege anahtar sözcüğünü kullanarak Func temsilcisine anonim bir metot atayabilirsiniz.
Func<int> getRandomNumber = delegate()
{
Random rnd = new Random();
return rnd.Next(1, 100);
};
C# Lambda Expression ile Func Kullanımı
Bir Func temsilcisi, aşağıda gösterildiği gibi bir lambda ifadesiyle de kullanılabilir:
Func<int> getRandomNumber = () => new Random().Next(1, 100);
//Or
Func<int, int, int> Sum = (x, y) => x + y;
Özet:
- Func generic bir delegate türüdür.
- Func delegate türü bir değer döndürmelidir.
- Func delegate türü, sıfır ila 16 giriş parametresine sahip olabilir.
- Func delegate’i, ref ve out parametrelerine izin vermez.
- Func delegate türü, anonim bir metotla veya lambda ifadesiyle kullanılabilir.