日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

委托(Delegate)简介

發布時間:2023/12/19 综合教程 37 生活家
生活随笔 收集整理的這篇文章主要介紹了 委托(Delegate)简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.什么是委托?是用來干什么的?

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

委托保存的是對函數(function)的引用,即保存對存儲在托管堆(managed heap)中的對象的引用,而不是實際值。

2.代碼定義格式

在C#中使用delegate關鍵字定義委托。

[public/private/protect]修飾符 delegate [string/int/void]類型 name方法名();

如:public delegate void student(); private delegate string ClassName();

3.簡單用例1

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

private delegate void show(string msg);

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

show show = new show(message);

show("aaa");

}

private void message(string msg)

{

MessageBox.Show(msg);

}

}

}

委托可以動態的與任何方法關聯(但必須保證關聯的方法與委托定義的方法類型相同、參數相同),上面的例子里就是將委托與message方法進行了關聯。

委托是對方法的包裝。實現了對象與方法的隔離,增強了拓展性。

4.簡單用例2

本示例演示組合委托。委托對象的一個有用屬性是,它們可以“+”運算符來組合。組合的委托依次調用組成它的兩個委托。只可組合相同類型的委托,并且委托類型必須具有 void 返回值。“-”運算符可用來從組合的委托移除組件委托。

using System;

delegate void MyDelegate(string s);

class MyClass

{

public static void Hello(string s)

{

Console.WriteLine(" Hello, {0}!", s);

}

public static void Goodbye(string s)

{

Console.WriteLine(" Goodbye, {0}!", s);

}

public static void Main()

{

MyDelegate a, b, c, d;

a = new MyDelegate(Hello);

b = new MyDelegate(Goodbye);

c = a + b;

d = c - a;

Console.WriteLine("Invoking delegate a:");

a("A");

Console.WriteLine("Invoking delegate b:");

b("B");

Console.WriteLine("Invoking delegate c:");

c("C");

Console.WriteLine("Invoking delegate d:");

d("D");

}

}

輸出結果:

Invoking delegate a:

Hello, A!

Invoking delegate b:

Goodbye, B!

Invoking delegate c:

Hello, C!

Goodbye, C!

Invoking delegate d:

Goodbye, D!

5.簡單用例3

本實例展示泛型委托,即參數的類型不確定,以達到更高的靈活性:

using System;

using System.Collections.Generic;

using System.Text;

namespace Test

{

public delegate string ProcessDelegate<T,S>(T s1, S s2);

public class Program

{

static void Main(string[] args)

{

ProcessDelegate<string,int> pd = new ProcessDelegate<string,int>(new Test().Process);

Console.WriteLine(pd("Text1", 100));

}

}

public class Test

{

public string Process(string s1,int s2)

{

return s1 + s2;

}

}

}

  輸出的結果就是:

  Text1100

委托,其實就是對方法提供一個模板、一個規范、一個定義,就好比接口是對類得抽象,委托可以理解為對方法的抽象。從而實現對方法的封裝。

委托一個最主要的用途,就是事件。也就是說委托常常與事件聯系在一起。

在下一博文中,我將介紹如何利用委托來自定義事件。

總結

以上是生活随笔為你收集整理的委托(Delegate)简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。