说说参数传递(泛型委托)

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

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

实例:根据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的(小到可以执行的语句),所以每种写法都是为了适应更好的变化,适应不同情况,避免不必要的直接接触。


  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 26
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值