C# Delegate用法
来源:互联网 发布:淘宝大学免费课程视频 编辑:程序博客网 时间:2024/05/22 02:17
对于delegate的通俗理解就是一个指向函数的指针,它的出现使函数可以像变量一样写到函数列表中去,下面跟随一个实例去了解下:
由于只是为了解其用法,所以建一个控制台应用程序完全足够满足要求(先贴代码,然后解释):
控制台类: 新建的类:
namespace Deletegate
{
public delegate void ShowMessageDelegate();
class Program
{
static void ShowMessageOne()
{
Console.WriteLine("This is Message1!!");
}
static void ShowMessageTwo()
{
Console.WriteLine("This is Message2!!");
}
static string ShowClassOne(string name)
{
return name + ":NO1";
}
static string ShowClassTwo(string name)
{
return name + ":NO2";
}
static void Main(string[] args)
{
ShowMessageDelegate show=null;
show += ShowMessageOne;
show += ShowMessageTwo;
show();
MyClass c1 = new MyClass(ShowClassOne);
Console.WriteLine(c1);
MyClass c2 = new MyClass(ShowClassTwo);
Console.WriteLine(c2);
Console.ReadKey();
}
}
}
namespace Deletegate
{
public class MyClass
{
public delegate string ShowClass(string ss);
public MyClass(ShowClass shofuc)
{
MyShow = shofuc;
}
public ShowClass MyShow { get; set; }
public string ClassName { get { return "MyClass"; } }
public override string ToString()
{
return MyShow(ClassName);
}
}
}
从代码中可以看出:
1. 给Delegate变量可以Add多个相同类型的函数,其结果相当于将这些函数依次执行。这就是为什么在对话框应用程序中,经常会对某个事件附加处理函数,例如,
List,SelectedChanged+=EventHander,void EventHander(object sender, System.EventArgs e),EventHander 是自己实现的响应函数,这也就是事件萎托所用的。
2.委托可以作为另外一个函数的参数传递,上面的代码可以看出:
在Program类中实现了两个方法,一个是ShowClassOne,一个是ShowClassTwo,分别用来对传入参数name的两种处理,C1,C2实现的时候分别传入不同的委托,进而实现不同的显示结果。当然,也可以在MyClass类中实现,不过每添加一种显示方式就得改一次MyClass类,这是很不好的,可重用性太差,如此,便可以解决。
在实际编程中。你可能会遇到下面的问题:
做系统的时候,免不了和数据打交道,增,删,改,查最常用,在界面应用程序中,我们可能会以弹出对话框的形式对数据进行添加和修改,这两个对话框如何组织呢,当然是会写一个模板窗口,然后实例话不同而已,这时实现可以有两种方式:
1> 在模板窗口中设置一个变量Sign,根据传入sign的不同实现话不同的窗口中,数据源变化,“保存”的实现等,只需要添加一个Case判断,分别执行不同的语句。
2>在模板窗口中传入Save方法的一个委托,然后模板窗口的代码不需要修改,只需要在调用的时候传入不同的委托就好。
第一种方法可重用性显面易见不如第二种方法,当需要实例化的窗口增多时,不可预计时,第一种方法代价太大。孰优孰劣,只有在自己编程时用到才会知道。
上面程序的运行结果如下图:
一家之言,请各位大牛批评指正~ ~!
- C# Delegate用法
- C# delegate 用法
- C#中的委托(delegate)用法简介
- C#中delegate的简单用法
- C#中delegate用法(带参数)
- delegate用法
- delegate用法
- delegate 用法
- C# Delegate
- C# delegate
- C# Delegate
- C# - Delegate
- C# delegate
- C# delegate
- C# delegate
- C# delegate
- c# delegate
- C# Delegate
- HTML中插入flash
- Easy Number Challenge(求因子个数)
- ArchLinux上搭建Twitter Storm平台
- 云计算基础 交付计算资源的另一种方式
- 做不成情侣,也别做朋友:陈思念原创伤感日志
- C# Delegate用法
- AForge学习笔记(2):AForge.Controls
- Tutorial: Make Vim as Your C/C++ IDE Using c.vim Plugin
- 基础题
- Adobe Flash Player 11.2 on Fedora 17
- 伤感空间日志:原来,你和我一样,也害怕相聚后的离别
- 浅谈Java中的几种随机数
- 监听鼠标和键盘
- 深度探討 Delphi 三層架構