1. 程式人生 > 其它 >c#委託學習總結

c#委託學習總結

技術標籤:c#c#delegate委託ActionFunc

委託是一個類,它定義了方法的型別,使得可以將方法當作另一個方法的引數來進行傳遞。

委託的宣告:

沒有返回值,沒有引數的委託

public delegate void MyDelegate()

有返回值,有引數的委託:

public delegate string MyDelegate(int i);

通常情況下使用.Net框架定義好的委託,無需自定義委託。

Action:無返回值的泛型委託

Action<int,string> 表示有傳入引數int,string無返回值的委託

Action至少0個引數,至多16個引數,無返回值。

例項:

public static void ChineseGreeting(string name)
{
    Console.WriteLine("早上好," + name);
}

public static void GreetPeople(string name, Action<string> MarkGreeting)
{
     MarkGreeting(name);
}

 static void Main(string[] args)
 {
     GreetPeople("張三", ChineseGreeting);
     Console.ReadLine();
 }

結果:

Func:有返回值的泛型委託

Func<int> 表示無參,返回值為int的委託

Func至少0個引數,至多16個引數,根據返回值泛型返回。必須有返回值,不可void。

例項:

public static string HasReturnMehtodInt(int i)
{
    return "我是一個有引數有返回值的方法,引數為:" + i;
}

public static string TestMethod(Func<int, string> func)
{
     return func(1);
}

static void Main(string[] args)
{
     string str = TestMethod(HasReturnMehtodInt);
     Console.WriteLine(str);
     Console.ReadLine();
}

結果:

總結:

委託是一個類,它定義了方法的型別,使得可以將方法當作另一個方法的引數來進行傳遞,這種將方法動態地賦給引數的做法,可以避免在程式中大量使用If-Else(Switch)語句,同時使得程式具有更好的可擴充套件性。