转载于:http://blog.sina.com.cn/s/blog_604527460100oxx1.html
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
委托,其实就是对方法提供一个模板、一个规范、一个定义,就好比接口是对类得抽象,委托可以理解为对方法的抽象。从而实现对方法的封装。
委托一个最主要的用途,就是事件。也就是说委托常常与事件联系在一起。
分享到:
相关推荐
让你认识一下什么是委托,让你对你的做的项目的功能更完美
委托 和 事件在 .Net Framework中的应用...本文中,将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。
C#委托 C#委托 C#委托C#委托 C#委托
委托 和 事件在 .Net ...本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论
.NET委托:一个C#睡前故事.NET委托
这个里面有自定义委托的实现,多播委托的实现,泛型委托的实现。编译环境为VS2015
我们在之前写的[《QT(7)-初识委托》](https://blog.csdn.net/qq_40666149/article/details/128674837)文章末尾提到,***“使用一个类继承QStyledItemDelegate实现常用的控件委托,在使用时可以直接调用接口,灵活...
委托和事件在 .Net ...本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。
C#委托demo C#委托demo C#委托demo
C#委托是什么的? 在正式介绍委托之前,我想下看看生活中委托的例子——生活中,如果如果我们需要打官司,在法庭上是由律师为我们辩护的,然而律师真真执行的是当事人的陈词,这时候律师就是一个委托对象,当事人...
关于委托模式详细讲解(委托),主要举例说明..
C#委托详解:匿名委托,委托的应用 含源代码
委托 和 事件在 .Net ...本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。
拖车安排委托书.docx
C# 讲解委托和事件的好文章集合。 包括: C# 委托妙文 C# 委托和事件 C# 委托使用方法 C# WndProc的使用方法 文档内有详细代码,您一定可以用它学会委托和事件!
在C#使用委托的见解,实现在多线程下,对空间的使用。完成委托的职责。。。。
.NET委托与事件用例.NET委托与事件用例.NET委托与事件用例.NET委托与事件用例.NET委托与事件用例.NET委托与事件用例.NET委托与事件用例
研究生成绩单打印委托书,研究生成绩单打印委托书,研究生成绩单打印委托书。
委托和事件教程,委托事件教程委托和事件教程,委托事件教程委托和事件教程,委托事件教程委托和事件教程,委托事件教程委托和事件教程,委托事件教程委托和事件教程,委托事件教程
本文章主要是针对C#委托及事件委托进行详细分析与讲解