C#--实现委托

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aimin_com/article/details/87864912

说明

委托就是将方法当参数,目的就是避免if-Else(Swith)语句的使用,同时具有很好的扩展性。



今天我们以Delegate和Action为例:

[ Demo—Delegate ]:我们建立一个控制台程序:

namespace Demo__delegate
{
    delegate int New(int a, int b);  //首先我们在最开始处建立一个委托
    class Program
    {
        static void Main(string[] args)
        {
            New add = new New(NewAdd1);  //实例化一个委托,并执行addstatic1方法

            add += NewAdd2; //给委托在绑定一个方法,如果有两个地方显示则自动会全部显示,如果只有一个地方显示,则覆盖之前方法
            int r = add(1, 2); //给定数值

            Console.WriteLine(r);  //结果显示的是第二个方法结果。
            Console.ReadKey();
            
             
        }


       //方法一
        static int NewAdd1(int a,int b)
        {
            return a - b;
        }

       //方法二
        static int NewAdd2(int a, int b)
        {
            return a + b;
        }
    }
}



[ Demo—Action ]:我们建立一个winfrom程序:

  1. 我们建立三个窗体,然后一个命名父窗体,两个子窗体。

父窗体:我们建立一个button按钮和一个txt文本框

namespace Demo__Action
{
    public partial class frmParent : Form
    {
        public Action<string> New { get; set; }   //首先我们在最开始处建立一个委托
        public frmParent()
        {
            InitializeComponent();
        }

        private void btnok_Click(object sender, EventArgs e)
        {
            if (New==null)   //判断是否有委托
            {
                return;
            }
            New(this.txtParent.Text);  //让显示出来的窗体的文本框显示父窗体文本框内容
        }

        private void Parent_Load(object sender, EventArgs e)
        {
            //实例化窗体
            frmSon son = new frmSon();  
            frmSon2 son2 = new frmSon2();

            New = son.NewtxtSon; //调用NewtxtSon方法传入委托参数
            New += son2.NewtxtSon2;  //调用NewtxtSon2方法传入委托参数
            //第一次用的“=”,是赋值的语法;第二次,用的是“+=”,是绑定的语法。如果第一次就使用“+=”,将出现“使用了未赋值的局部变量”的编译错误。


            //程序执行打开两个窗体
            son.Show(); 
            son2.Show();
        
        }
    }
}

然后我们的两个子窗体直接添加一个txt文本框,然后在里面写一个方法即可。

方法2和这个一样,省略。。。

 /// <summary>
        /// 自定义一个方法,用于父窗体的调用
        /// </summary>
        /// <param name="txt"></param>
        public void NewtxtSon(string txt)
        {
            this.txtSon.Text = txt;  //将此参数显示在在此窗体文本框内。
        }

这个时候我们在父窗体中随便写东西,然后点击button按钮即可在三个窗体中的文本框中显示同样的内容。




委托思想

我们的委托就是在父窗体中设置一个委托,然后在我们也要跟着执行的地方不用设置任何东西,然后父窗体中加载子窗体的方法,子窗体就可以自动执行,这是面向对象性质,如同叫小孩吃饭,之前的方法是我们直接喂给小孩吃饭,现在我们是告诉小孩吃饭,让他自己去吃。其实这个委托和我们之前学到的一个设计模式:Observer观察者模式很相近的。


参考博客。
.net中的各种委托()

C#委托的介绍(delegate、Action、Func、predicate)
举例说明

C#中的委托和事件 - Part.1



委托如何替换IF--Else。 接下来请期待!

猜你喜欢

转载自blog.csdn.net/aimin_com/article/details/87864912