文档章节

C#多个方法前后处理一样的实验性写法

捍卫机密
 捍卫机密
发布于 2017/04/22 01:15
字数 666
阅读 18
收藏 0

 

实验性写法。就是给方法加入一个外壳,前后处理。常用在 很多方法都需要一样的前后处理。

比如得到一个string 解密,记录日志,json转换obj在交给传入的函数处理,再obj到json,日志,加密返出去。很多方法都会有一样的处理,只是对应具体类型不同。用一个程序处理公共部分。极大简化调用。

        #region --实验性扩展方法--
        /// <summary>
        /// 下层的处理
        /// </summary>
        /// <param name="x"></param>
        /// <returns></returns>
        public static int n(int x)
        {
            return x + 10;
        }
        /// <summary>
        /// 创建一个委托 一个输入参数,一个输出参数
        /// </summary>
        /// <typeparam name="TI"></typeparam>
        /// <typeparam name="TO"></typeparam>
        /// <param name="i"></param>
        /// <returns></returns>
        public delegate TO X<TI, TO>(TI i);

        /// <summary>
        /// 这个方法临时自定义 输入和输出转换
        /// </summary>
        /// <typeparam name="TI"></typeparam>
        /// <typeparam name="TO"></typeparam>
        /// <typeparam name="NTI"></typeparam>
        /// <typeparam name="NTO"></typeparam>
        /// <param name="self"></param>
        /// <param name="input"></param>
        /// <param name="CH"></param>
        /// <param name="CHO"></param>
        /// <returns></returns>
        public static NTO TX<TI, TO, NTI, NTO>(this X<TI, TO> self, NTI input, Func<NTI, TI> CH, Func<TO, NTO> CHO)
        {
            var ti = CH(input);
            var to = self(ti);
            var cho = CHO(to);
            return cho;
        }
        /// <summary>
        /// 这个方法和上面的一样,只是不是扩展方法
        /// </summary>
        /// <typeparam name="TI"></typeparam>
        /// <typeparam name="TO"></typeparam>
        /// <typeparam name="NTI"></typeparam>
        /// <typeparam name="NTO"></typeparam>
        /// <param name="self"></param>
        /// <param name="input"></param>
        /// <param name="CH"></param>
        /// <param name="CHO"></param>
        /// <returns></returns>
        public static NTO TX1<TI, TO, NTI, NTO>( X<TI, TO> self, NTI input, Func<NTI, TI> CH, Func<TO, NTO> CHO)
        {
            System.Console.WriteLine(input);
            var ti = CH(input);
            var to = self(ti);
            var cho = CHO(to);
            System.Console.WriteLine(cho);
            return cho;
        }
        /// <summary>
        /// 这个方法,固定了前后处理(打印加转换)减少了输入参数,借string扩展触发
        /// </summary>
        /// <typeparam name="TI"></typeparam>
        /// <typeparam name="TO"></typeparam>
        /// <param name="self"></param>
        /// <param name="f"></param>
        /// <returns></returns>
        public static string TX2<TI, TO>(this string self, X<TI, TO> f)
        {
            System.Console.WriteLine(self);
            var ti = self.ToObj<TI>();
            var to = f(ti);
            var cho = to.ToJson();
            System.Console.WriteLine(cho);
            return cho;
        }
        /// <summary>
        /// 这个方法和上面那个一样,都固定了前后处理,但不是扩展方法
        /// </summary>
        /// <typeparam name="TI"></typeparam>
        /// <typeparam name="TO"></typeparam>
        /// <param name="f"></param>
        /// <param name="input"></param>
        /// <returns></returns>
        public static string TX2<TI, TO>(X<TI, TO> f, string input)
        {
            System.Console.WriteLine(input);
            var ti = input.ToObj<TI>();
            var to = f(ti);
            var cho = to.ToJson();
            System.Console.WriteLine(cho);
            return cho;
        }

        /// <summary>
        /// 这个是实验入口。 和调用方法范例
        /// </summary>
        public static void PFType()
        {
            X<int, int> x = n;
            System.Console.WriteLine(typeof(X<int, int>));
            // 自定义前后处理
            TX1<int, int, string, string>(n, "1", (i) => Convert.ToInt32(i), (o) => o.ToString());
            // 借指定的string触发处理,n就是那个具体处理函数
            System.Console.WriteLine("2".TX2<int, int>(n));
            // 直接调用函数,输入n 和参数
            System.Console.WriteLine(TX2<int, int>(n, "3"));
        }
        #endregion
实验结果,在交互窗口中实现
> WlToolsLib.Expand.OtherExpand.PFType();
WlToolsLib.Expand.OtherExpand+X`2[System.Int32,System.Int32]
1
11
2
12
12
3
13
13

 

© 著作权归作者所有

上一篇: C# 去除两端空格
下一篇: 关于字体
捍卫机密
粉丝 5
博文 129
码字总数 49283
作品 0
成都
程序员
私信 提问
安卓开发手把手教你打造万能适配器,告别繁重重复代码

大家在安卓开发过程中,经常会用到listview或者gridview,在编写代码的时候为了节约资源我们通常会采用持有者模式,即ViewHolder,如果一个工程中有多个listview,通常情况下我会写多个ViewHol...

juyao
2015/12/12
66
0
Android 面向切面编程 AOP 解决连续点击打开重复页面问题

先介绍概念 比如我希望在所有页面启动的时候加一个埋点~ 希望在所有按钮点击的时候加个快速重复点击的判断~等等 这样在项目中同一种类型的所有代码处,统一加入逻辑处理的方法,叫做 面向切面...

boredream
2018/07/13
0
0
Objective-C语法快速参考(收藏)

大部分有一点其他平台开发基础的初学者看到XCode,第一感想是磨拳擦掌,看到Interface Builder之后,第一感想是跃跃欲试,而看到Objective-C的语法,第一感想就变成就望而却步了。好吧,我是...

慎道
2011/07/14
0
0
Object-C 入门

大部分有一点其他平台开发基础的初学者看到XCode,第一感想是磨拳擦掌,看到 Interface Builder之后,第一感想是跃跃欲试,而看到Objective-C的语法,第一感想就变成就望而却步了。好吧,我是...

长平狐
2012/10/09
257
0
Objective-C语法快速参考

大部分有一点其他平台开发基础的初学者看到XCode,第一感想是磨拳擦掌,看到Interface Builder之后,第一感想是跃跃欲试,而看到Objective-C的语法,第一感想就变成就望而却步了。好吧, 大部...

晨曦之光
2012/05/28
86
0

没有更多内容

加载失败,请刷新页面

加载更多

八、RabbitMQ的集群原理

集群架构 写在前面 RabbitMQ集群是按照低延迟环境设计的,千万不要跨越WAN或者互联网来搭建RabbitMQ集群。如果一定要在高延迟环境下使用RabbitMQ集群,可以参考使用Shovel和Federation工具。...

XuePeng77
今天
1
0
mac系统下,brew 安装mysql,用终端可以连接,navicat却连接不上?

问题: 1.报错? 2059 - Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(../Frameworks/caching_sha2_password.so, 2): image not found 2.自己通过设置,已经把密......

写bug的攻城狮
昨天
2
0
老生常谈,HashMap的死循环

问题 最近的几次面试中,我都问了是否了解HashMap在并发使用时可能发生死循环,导致cpu100%,结果让我很意外,都表示不知道有这样的问题,让我意外的是面试者的工作年限都不短。 由于HashMap...

群星纪元
昨天
5
0
拉普拉斯算子

拉普拉斯算子是二阶微分算子。 我们知道,一维离散信号一阶微分公式如下: 相应的,一维离散信号二阶微分公式如下: 由于图像有x和y两个方向,因此图像信号属于二维离散信号。其在x,y两个...

yepanl
昨天
3
0
记录"正则表达式"

详细请查看我的博客:https://blog.enjoytoshare.club/article/RegularExpression.html 1 写在前面 正则表达式(Regular Expression)在代码中常常简写为regex。正则表达式通常被用来检索、替...

wugenqiang
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部