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

说说參数传递(泛型托付)

这篇博客重点在于理解,细节之处不再具体介绍.

托付的用处在于匹配,发出的信息,谁匹配类型就接受监听信息.泛型的增加,使托付的用途更加广泛,宽展了托付的參数类型,复用性更加强大.以下我们看看一个简化版的,直接增加类型使用.

实例:依据ID载入信息,返回信息.那么非常久曾经我这样写.代码1:数据库连接版

Private  Table Reslt(stringID){
 
//调用查询方法返回table.
}

半年前我学会这样写,代码2:直接版

private ProductElectricCollection Reslt(string iD)
{
     string sql = string.Format("select * from {0} where code {1}",getTableName(),WhereAction(iD));
     return QueryDate(sql);
 
}

这样就返回了集合呀.集合呢.不再是table.入公司不久又变了,略微使用了泛型托付.

简单理解就是将方法增加到托付中,(參数类型匹配),这时候我又改变了写法了,看起来没什么不同,仅仅是加了一个外壳

代码3:直接托付调用方法

public ProductElectricCollection Load(string id)
{
 //參数为string,返回类型为ProductElectricCollection托付,注冊了result方法
  Func<string,ProductElectricCollection> message = Reslt;//指向函数指针地址
  return message(id);
}
 
private ProductElectricCollection Reslt(string iD)
{
  string sql = string.Format("select * from {0} where code {1}",getTableName(),WhereAction(iD));
  return QueryDate(sql);
 
}

以上是我们经常使用的托付方式。相信用过的一定熟悉。

这样的写法用了几天。发现有和平台写的有些不同,好像是非常久曾经的写法了,去官网看了看。发现了匿名函数和Lamdba

这些都是托付的写法。

所以能够使用这两种写法。可是写法就相对复杂了。由于加入了中间层。略微变通了

代码4,增加了參数

public ProductElectricCollection Load(string id)
{
this.LoadyByItem(ss=> Reslt(id));
}

ss是我们定义的參数。为string类型,制定了我们绑定的函数reslt,实參为id

这里并不会真正的掉用reslt函数。而是在loadByitem中依据指针回调。

LoadByItem就是我们定义的方法參数为函数指针(托付使用,带返回值的)

public ProductElectricCollection LoadyByItem(Func<string,ProductElectricCollection> result)
{
 	       string id=string.Empty;
               return result(id);//调用引用的函数 
}

这里的result(id),就是调用形參。參数的写法是否大有改变呀。若将该方法抽象,使用泛型T,放到基类中,将其公有化,可继承,这样就大大提高了复用性。简单的抽象TC为自己定义Collection

public TC Load(Action<WhereSqlBuilder> whereAction)
{
TC result = null;
whereAction.NullCheck("whereAction");
WhereSqlBuilder bulider = new WhereSqlBuilder();
whereAction(bulider); 
result= InnerLoadByBuilder(bulider.ToSqlString(bulider));
return result;
}

这样一来就可用继承基类。直接调用该方法了,当然了。sql也是要抽象的,没有业务的关系。

小结:

  • 重点我们要理解不管是传入直接的字符或是传入方法指针,都是同样的,仅仅是写法略微有些改变
  • 改变的写法是要在实际调用中,写入实參,调用方法中写入空的參数,目的就是为了实參传递。

  •  方法传递,或是字符传递。最后都是要运行到sql的(小到能够运行的语句),所以每种写法都是为了适应更好的变化,适应不同情况。避免不必要的直接接触。


转载于:https://www.cnblogs.com/gavanwanggw/p/7084449.html

相关文章:

  • 【转】Python常用文件操作参考
  • 在spring-boot工程中添加spring mvc拦截器
  • nodejs读写大文件
  • TreeView 控件应用
  • 终端代码重复率检测实践
  • 恋爱男女冷笑话
  • kali之***XP系统3(非法关闭计算机)
  • startActivityForResult的疑问与探索
  • 面向对象03
  • MIME 详解 [转]
  • Linux - 主机的细部权限规划:ACL 的使用
  • Crontab 命令需要注意的地方
  • mysql-连接及子查询使用删除重复记录
  • postfix邮件服务的高级配置
  • 关于期权池Option Pools与Vesting:码农创业防身必备法器
  • [译] 怎样写一个基础的编译器
  • Angular 响应式表单之下拉框
  • HTTP中GET与POST的区别 99%的错误认识
  • Java应用性能调优
  • JS题目及答案整理
  • Netty源码解析1-Buffer
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • 基于web的全景—— Pannellum小试
  • ------- 计算机网络基础
  • 前端js -- this指向总结。
  • 跳前端坑前,先看看这个!!
  • 项目管理碎碎念系列之一:干系人管理
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 自制字幕遮挡器
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • zabbix3.2监控linux磁盘IO
  • ###C语言程序设计-----C语言学习(3)#
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • $NOIp2018$劝退记
  • (1)bark-ml
  • (1)STL算法之遍历容器
  • (Matlab)使用竞争神经网络实现数据聚类
  • (Python第六天)文件处理
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (四)Linux Shell编程——输入输出重定向
  • (五)关系数据库标准语言SQL
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)http-server应用
  • (转)LINQ之路
  • (转)Oracle存储过程编写经验和优化措施
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .bat文件调用java类的main方法
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET gRPC 和RESTful简单对比
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET 药厂业务系统 CPU爆高分析
  • .net6+aspose.words导出word并转pdf
  • .NET应用架构设计:原则、模式与实践 目录预览