1. 程式人生 > >C#委託與事件之----委託

C#委託與事件之----委託

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); } } }