码迷,mamicode.com
首页 > Windows程序 > 详细

C#委托delegate的一个应用实例

时间:2020-07-10 13:22:44      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:技术   add   string   reg   delegate   src   代码   图片   cti   

委托是自定义的方法的一种类型,与声明的委托具有相同参数以及返回值类型,即可使用委托来调用该方法

使用delegate关键字申明委托

使用委托可以降低耦合性,提高可维护性

——————————————————————————————————————————————————————————

下面是一个解耦实例:

原始写法:

技术图片
public void TestOne(string name)
        {


            if (name == "A")
            {
                #region 业务逻辑
                //...........
                #endregion

                Console.WriteLine("我是方法A:{0}", name);
            }
            else if (name == "B")
            {
                #region 业务逻辑
                //...........
                #endregion
                Console.WriteLine("我是方法B{0}", name);
            }
            else if (name == "C")
            {
                #region 业务逻辑
                //...........
                #endregion
                Console.WriteLine("我是方法C{0}", name);
            }
        }
原始代码

使用委托解耦:

技术图片
 public class MyDelegate
{
        /// <summary>
        /// 构造函数初始化MyDic
        /// </summary>
        public MyDelegate()
        {
            MyDic.Add(MyEnum.ActionA, ActionA);
            MyDic.Add(MyEnum.ActionB, ActionB);
            MyDic.Add(MyEnum.ActionC, ActionC);
        }

        public Dictionary<MyEnum, DelegateOne> MyDic = new 
        Dictionary<MyEnum, DelegateOne>();
        public enum MyEnum
        {
            ActionA,
            ActionB,
            ActionC
        }
        //使用委托解耦,如需拓展业务,只需要增加一个方法即可
        public void TestDelegateOne(string name, DelegateOne action)
        {
            action(name);
        }

        private void ActionA(string name)
        {
            #region 业务逻辑
            //...........
            #endregion

            Console.WriteLine("我是方法A:{0}", name);
        }

        private void ActionB(string name)
        {
            #region 业务逻辑
            //...........
            #endregion
            Console.WriteLine("我是方法B{0}", name);
        }

        private void ActionC(string name)
        {
            #region 业务逻辑
            //...........
            #endregion
            Console.WriteLine("我是方法C{0}", name);
        }
}
解耦后

调用:

技术图片
MyDelegate md = new MyDelegate();
            md.TestDelegateOne("解耦啦", new DelegateOne(md.MyDic[MyDelegate.MyEnum.ActionA]));
调用

 

C#委托delegate的一个应用实例

标签:技术   add   string   reg   delegate   src   代码   图片   cti   

原文地址:https://www.cnblogs.com/Script1/p/13278588.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!