当前位置: 首页 > news >正文

做职业装的网站免费企业网站开源系统

做职业装的网站,免费企业网站开源系统,代码编程教学入门软件,dw做的网站如何用手机看如上图所示#xff1a;我们将会在下面文章上一步一步变形实现出这样的功能。一、傻瓜式执行演示首先建立控制台项目#xff0c;创建Begin() FirstMiddleware() SecondMiddleware() End() 三个函数1 /// summary2 /// 开始执行前3 /// /summ… 如上图所示我们将会在下面文章上一步一步变形实现出这样的功能。一、傻瓜式执行演示首先建立控制台项目创建Begin() FirstMiddleware() SecondMiddleware() End() 三个函数1        /// summary2        /// 开始执行前3        /// /summary4        public static void Begin()5        {6            Console.WriteLine(begin executing);7        }89        /// summary 10        /// 执行结束 11        /// /summary 12        public static void End() 13        { 14            Console.WriteLine(end executed); 15        } 16 17        public static void FirstMiddleware() 18        { 19            Console.WriteLine(第一个中间件); 20        } 21        public static void SecondMiddleware() 22        { 23            Console.WriteLine(第二个中间件); 24        }按照如下顺序执行并显示结果1        static void Main(string[] args)2        {3            //Console.WriteLine(Hello World!);4            #region 傻瓜式演示中间件执行方法5            Begin();6            FirstMiddleware();7            End();8            Console.WriteLine(-------------------);9            Begin(); 10            SecondMiddleware(); 11            End(); 12            #endregion 13        }二、封装傻瓜式执行函数这个Begin() End() 两个方法会执行多次所以我们可以选择封装一下1        /// summary2        /// 封装一个执行方法 减少重复代码3        /// 入参可以传递一个无参数 无返回值函数 用内置委托接受4        /// /summary5        /// param namefunction/param6        public static void CommonExecute(Action function)7        {8            Begin();9            function(); 10            End(); 11        }如下调用,执行结果和前文一样1            #region 封装傻瓜式执行函数 2            CommonExecute(FirstMiddleware); 3            Console.WriteLine(-------------------); 4            CommonExecute(SecondMiddleware); 5            #endregion三、利用lambda变形简化这里我们需要做个演变就是将我们要执行的CommonExecute()函数用lambda表达式包裹为另一个函数的参数传递于是创建一个ExtraExecute() 函数1        public static void ExtraExecute(Action function)2        {3            try4            {5                Console.WriteLine(try here);6                function();7            }8            catch (Exception)9            { 10 11                throw; 12            } 13        }我们将包裹后的CommonExecute()作为入参传递给ExtraExecute()调用如下所示1            ExtraExecute(()  CommonExecute(FirstMiddleware)); // 执行第一个中间件,先执行ExtraExecute() 再执行CommonExecute() 2            Console.WriteLine(-----------); 3            ExtraExecute(()  CommonExecute(SecondMiddleware)); // 执行第二个中间件通过观察发现CommonExecute() 与ExtraExecute()方法签名一样所以我们可以调换下两者的执行顺序如下所示1            Console.WriteLine(-----------); 2            // 更改中间件调用顺序 先执行CommonExecute() 再执行ExtraExecute() 3            CommonExecute(()  ExtraExecute(FirstMiddleware));带参创建中间件调用链我们刚刚演示了无参的中间件调用现在给中间件执行体增加入参新增FirstPipe(string msg, Actionfunc) SecondPipe(string msg, Actionfunc) ThirdPipe(string msg, Actionfunc) 三个函数如下调用,核心原则就是将中间件执行函数包裹成参数传递给下一个执行的函数1 Actionstring pipe  (msg)  ThirdPipe(msg, 2                                                        (msg1)  SecondPipe(msg1, 3                                                            (msg2)  FirstPipe(msg2, FirstMiddleware))); 4 pipe(Hello World); // 调用动态创建中间件管道模型从带参创建中间件调用链上我们发现我们无法把这个管道变成动态的那么如何才能将中间件动态传入以及动态改变调用顺序呢通过分析我发现一个管道执行的最基本单元可以像下面这样定义1        public abstract class DynamicPipeBase2        {3            protected readonly Actionstring _action;45            public DynamicPipeBase(Actionstring action)6            {7                this._action  action;8            }9            public abstract void Handle(string msg); // 调用执行中间件函数体 10        }然后定义三个函数继承 DynamicPipeBase()1        /// summary2        /// 第三个中间件3        /// /summary4        public class ThirdSelfPipe : DynamicPipeBase5        {6            public ThirdSelfPipe(Actionstring action):base(action)7            {89            } 10            public override void Handle(string msg) 11            { 12                Console.WriteLine(Third Pipe Begin executing); 13                _action(msg); 14                Console.WriteLine(Third Pipe End executed); 15            } 16        } 17 18        public class SecondSelfPipe : DynamicPipeBase 19        { 20            public SecondSelfPipe(Actionstring action) : base(action) 21            { 22 23            } 24            public override void Handle(string msg) 25            { 26                Console.WriteLine(Second Pipe Begin executing); 27                _action(msg); 28                Console.WriteLine(Second Pipe End executed); 29            } 30        } 31 32        /// summary 33        /// 第一个中间件 34        /// /summary 35        public class FirstSelfPipe : DynamicPipeBase 36        { 37            public FirstSelfPipe(Actionstring action) : base(action) 38            { 39 40            } 41            public override void Handle(string msg) 42            { 43                Console.WriteLine(First Pipe Begin executing); 44                _action(msg); 45                Console.WriteLine(First Pipe End executed); 46            } 47        }有了中间件我们接着只需要构建管道即可如下所示1        /// summary2        /// 存储中间件: ListType _types;3        /// 生成中间件调用链: GeneratePipe4        /// 构建回调Build5        /// /summary6        public class PipeBuilder7        {8            protected readonly Actionstring _mainAction;9            ListType _types; 10            public PipeBuilder(Actionstring mainAction) 11            { 12                _mainAction  mainAction; 13                _types  new ListType(); 14            } 15            public PipeBuilder AddPipe(Type type) 16            { 17                _types.Add(type); 18                return this; 19            } 20 21            private Actionstring GeneratePipe(int index) 22            { 23                if(index_types.Count-1) 24                { 25                    var finalType (DynamicPipeBase)Activator.CreateInstance(_types[index], _mainAction); 26                    return finalType.Handle; 27                } 28                else 29                { 30                    var childHalde GeneratePipe(index  1); 31                    return ((DynamicPipeBase)Activator.CreateInstance(_types[index], childHalde)).Handle; 32                }  33 34            } 35 36            public Actionstring Build() 37            { 38                return GeneratePipe(0); 39            } 40        }最终我们在上端调用1            #region 动态创建中间件管道模型 2            Actionstring pipeChain  new PipeBuilder(MainAction) 3                .AddPipe(typeof(ThirdSelfPipe)) // 随意添加多个中间件执行单元 4                .AddPipe(typeof(SecondSelfPipe)) 5                .AddPipe(typeof(FirstSelfPipe)) 6                .Build(); 7            pipeChain(Hello World); 8            Console.WriteLine(-------------); 9            #endregion这样便实现了文章开头展示的效果。【社区不定期分享.NET知识】记得点赞关注哦如需源码关注后台后添加小编微信即可~
http://www.zqtcl.cn/news/634129/

相关文章:

  • 拱墅区建设局网站做设计的搜素材上什么网站
  • 济南烨铭网站建设外贸建网站免费模板
  • 那些网站可以做反链浏览器网站大全
  • 泉州网站建设推广企业网页兼容性站点
  • 怎样做视频上网站赚钱推广计划怎么做推广是什么
  • 台州外贸网站建设做网站开发一般用什么语言
  • 咸阳做网站的公司漯河网做网站
  • 红酒网站模板下载做网站加推广
  • 免费网站服务器域名在线手机网站建设
  • 北京网站ui设计公司在线设计装修
  • 大学生网站作业北京网站优化技术
  • 静安区网站开发固原网络推广
  • WordPress网站修改志成网站设计制作
  • 做网站需要注意的昭通网站seo优化
  • 站群软件lanyun网站开发
  • 固始网站制作html美食网页设计源码
  • 软件研发过程管理岳阳seo
  • 舟山网站建设代理门户网站建设流程
  • 天水建设银行网站网站建设方案免费下载
  • 长城宽带魔方优化大师官网下载
  • 宁波建设工程主管部门网站长沙网站维护
  • 网站推广机构我的世界怎么做赞助网站
  • 做网站的公司图sae wordpress storage
  • 做塑料的网站有哪些东道设计公司待遇如何
  • 烟台做网站哪家好网站加速器下载
  • 哪些网站是响应式河北省住房和城乡建设厅信用网站
  • 彩票网站html模板新闻html网页设计代码范文
  • 建网站视频怎么建网站卖产品
  • 做翻糖的网站深圳做购物网站
  • 国外界面设计网站海淘网站