前几天用C#做了一个小系统,有一个异面刷新的功能,我借助网络和自己的理解,总算是用委托实现了那个功能。至于为什么这么用我还是不理解。
学习一部分内容,无非就是要弄懂是什么,怎么实现的。学习大话设计模式中委托的时候,就记住猫叫老鼠跑了,是要说明什么,好多东西都没有领悟到。
这几天对委托再次学习,重新认识了一下,分享出来。
1,委托是什么?
简单理解,委托是将方法作为其他方法的参数。
2,什么时候用委托?
一个方法在其他方法中使用时。
也就是说使用委托的前提是被委托的方法已经存在。
拿大话设计上的猫叫老鼠跑的例子说吧(代码有改动,)。
/// <summary>
/// 声明委托
/// </summary>
public delegate void CatMouse();
class Program
{
static void Main(string[] args)
{
Cat cat = new Cat();//实例化猫
cat.Shout();//猫叫
Console.ReadKey();
}
}
/// <summary>
/// 猫类
/// </summary>
public class Cat
{
/// <summary>
/// 猫叫
/// </summary>
public void Shout()
{
Console.WriteLine("喵");
CatMouse catmouse = new CatMouse(Mouse.Run);//实例化具有让老鼠跑的委托
catmouse();
}
}
/// <summary>
/// 老鼠
/// </summary>
public static class Mouse
{
/// <summary>
/// 老鼠跑
/// </summary>
public static void Run()
{
Console.WriteLine("跑");
}
}
使用委托就是在猫叫的方法中使用了一下老鼠跑的方法。这里用的是老鼠跑的方法,我们完全可以用其他的一个或多个方法,这也就是委托的灵活性。
如果不使用委托的话,想要实现猫叫狗跑的操作得判断猫是不是叫,加个if判断。
3,怎么用委托
(本实例用C#异面刷新功能,即添加用户窗体添加完用户后,去刷新显示用户的另一个界面)
1)声明委托。
//声明委托
public delegate void myRef();
2)先写好要委托事的方法,也就是作为参数的方法。
刷新GridView的方法
private void refreshDGV() {
//刷新的代码
}
3)实例化委托,同时将要委托的方法作为参数
myRef mr = new myRef(refreshDGV); //实例化委托
以上代码都是在显示用户的窗体中。要想在添加用户的界面中使用委托要为窗体添加一个属性。
代码如下:
public partial class frmAddUser : Form
{
private frmmanageUser.myMethodRef mre;//委托类型的属性
public frmAddUser(frmmanageUser.myMethodRef _mr)//构造函数,带委托参数
{
InitializeComponent();
this.mre = _mr;
}
//其他方法略
}
4)调用委托
//调用委托,刷新frmmanagerUser界面
mre();
以上就是我对委托的总结,随着以后的学习肯定会对此有更深的认识,到时候再补上。。