C#委託與事件之----委託
阿新 • • 發佈:2018-12-14
C#委託與事件之委託
整理了一下委託的幾種使用方法,都在程式碼裡面了
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DelegateAndEvent
{
class Program
{
/*以下是委託型別的定義形式*/
//定義了一個委託型別,這個委託型別的名字是GetAString,他可以指向一個引數為空,返回值為string的方法.
private delegate string GetAString (); //無參有返
private delegate void PrintString(); //無參無返
public delegate void GreetingDelegate(string name); //有參無返
static void Main(string[] args)
{
int x = 40;
int y = 50;
string name1 = "小包子";
string name2 = "小餅乾";
//*1.第一種使用方法 : new一個委託例項.
//例項化一個委託型別,類似於例項化一個類,在例項化的過程中需要傳遞進去一個方法作為引數.
//a指向了x.ToString()方法.
//------例一
GetAString a = new GetAString(x.ToString);
string s = a();//通過委託例項去呼叫方法.
//------例二(寫法一)
GreetingDelegate delegate4;
delegate4 = EnglishGreet;
delegate4 += ChineseGreet;
delegate4("小麵包");//委託例項直接呼叫方法.
//------例二(寫法二)
GreetingDelegate delegate5 = new GreetingDelegate(ChineseGreet);
delegate5 += EnglishGreet;
//*2.第二種使用方法 : 給委託物件賦值(繫結)方法.
//--------例一
GetAString b = y.ToString;
string s1 = b.Invoke();
//--------例二
GreetingDelegate delegate1, delegate2;
delegate1 = ChineseGreet;
delegate2 = EnglishGreet;
GreetPeople(name1, delegate1);
GreetPeople(name2, delegate2);
//--------例三 : 同一個委託繫結多個方法
GreetingDelegate delegate3;
delegate3 = ChineseGreet;
delegate3 += EnglishGreet;
GreetPeople(name2,delegate3);//將依次呼叫先後被繫結上去的兩個方法.
//3.第三種使用方法:把委託型別物件當成一個引數來使用.
PrintString print=TestMethod1;
PrintStr(print);//print:Method1
//4.把方法作為引數的直接體現.
GreetPeople("花花", ChineseGreet);//print:你好,花花.
GreetPeople("huahua", EnglishGreet);//print:Hello,花花.
Console.WriteLine(s);//print:s=40
Console.WriteLine(s1);//print:s1=50
Console.ReadKey();
}
static void PrintStr(PrintString print)
{
print();//相當於呼叫了GetAString型別的.
}
static void TestMethod1()
{
Console.WriteLine("Method1");
}
//該方法為核心方法,它接收一個GreetingDelegate型別的方法作為引數.
static void GreetPeople(string name,GreetingDelegate MakeGreeting)
{
MakeGreeting(name);
}
static void ChineseGreet(string name)
{
Console.WriteLine("你好," + name);
}
static void EnglishGreet(string name)
{
Console.WriteLine("Hello," + name);
}
}
}