只讲实例:
委托的目的就是提高代码的内聚降低耦合度
/// <summary>
/// 获取json格式
/// </summary>
/// <returns></returns>
public JsonResult getActionJson()
{
JsonResult json = new JsonResult();
string Str_info=Request["Str_info"].ToString();//所有的信息字段
List<dynamic> list = new List<dynamic>();//获取list
getActionList glist = _getList_ZXSearch;
list= _getActionList(Str_info, glist);
json.Data = list;
json.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return json;
}
/// <summary>
/// 声明获取list列表
/// </summary>
/// <param name="_Code"></param>
/// <param name="Str_info"></param>
/// <returns></returns>
public delegate List<dynamic> getActionList(string Str_info);
public List<dynamic> _getActionList( string Str_info, getActionList list) {
return list.Invoke(Str_info);
}
/// <summary>
/// 装箱查询
/// </summary>
/// <param name="_Code">获取字段的值</param>
/// <param name="Str_info">所有的信息字段</param>
/// <returns></returns>
public List<dynamic> _getList_ZXSearch(string Str_info)
{
DataTable dt = null;
string sql = " select a.OrdID,a.C,a.K,a.G,a.Weight,a.batchID,a.boxID,a.isout from OrderBox a inner join (select ProjSys from ProjDetail where ProjPact=‘" + Str_info.Split(‘,‘)[0] + "‘ or ProjPact0=‘" + Str_info.Split(‘,‘)[0] + "‘) b on a.ProjSys=b.ProjSys ";
dt = getDt(sql);
List<dynamic> list = new List<dynamic>();
foreach (DataRow dr in dt.Rows)
{
list.Add(new { 产品编号 = dr["OrdID"], 箱长 = dr["C"], 箱宽 = dr["K"], 箱高 = dr["G"], 重量 = dr["Weight"], 批次 = dr["batchID"], 箱号 = dr["boxID"] });
}
return list;
}
/// <summary>
/// 获取table
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public DataTable getDt(string sql)
{
DataTable dt = null;
try
{
dt= FXSmart.KST.DAL.SqlHelper.GetDS(sql).Tables[0];
}
catch (Exception ex) {
throw ex;
}
return dt;
}
顾名思义,这个方法就是定义一个方法,把方法当参数传进去然后指向特定的方法。
下面是匿名委托,相同的代码进行改造。这里稍微有点改动。
/// <summary>
/// 获取json格式
/// </summary>
/// <returns></returns>
public JsonResult getActionJson()
{
JsonResult json = new JsonResult();
string Str_info=Request["Str_info"].ToString();//所有的信息字段
List<dynamic> list = new List<dynamic>();//获取list
list= getActionList glist=new getActionList(string Str_info) {
DataTable dt = null;
string sql = " select
a.OrdID,a.C,a.K,a.G,a.Weight,a.batchID,a.boxID,a.isout from OrderBox a
inner join (select ProjSys from ProjDetail where ProjPact=‘" +
Str_info.Split(‘,‘)[0] + "‘ or ProjPact0=‘" + Str_info.Split(‘,‘)[0] +
"‘) b on a.ProjSys=b.ProjSys ";
dt = getDt(sql);
List<dynamic> list = new List<dynamic>();
foreach (DataRow dr in dt.Rows)
{
list.Add(new { 产品编号 = dr["OrdID"], 箱长 = dr["C"], 箱宽 = dr["K"], 箱高 =
dr["G"], 重量 = dr["Weight"], 批次 = dr["batchID"], 箱号 = dr["boxID"] });
}
return list;
}
json.Data = list;
json.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return json;
}
public delegate List<dynamic> getActionList(string Str_info);
这里已经简单了一些,下面更加的简化:
/// <summary>
/// 获取json格式
/// </summary>
/// <returns></returns>
public JsonResult getActionJson()
{
JsonResult json = new JsonResult();
string Str_info=Request["Str_info"].ToString();//所有的信息字段
List<dynamic> list = new List<dynamic>();//获取list
list= getActionList glist=>(string Str_info) {
DataTable dt = null;
string sql = " select
a.OrdID,a.C,a.K,a.G,a.Weight,a.batchID,a.boxID,a.isout from OrderBox a
inner join (select ProjSys from ProjDetail where ProjPact=‘" +
Str_info.Split(‘,‘)[0] + "‘ or ProjPact0=‘" + Str_info.Split(‘,‘)[0] +
"‘) b on a.ProjSys=b.ProjSys ";
dt = getDt(sql);
List<dynamic> list = new List<dynamic>();
foreach (DataRow dr in dt.Rows)
{
list.Add(new { 产品编号 = dr["OrdID"], 箱长 = dr["C"], 箱宽 = dr["K"], 箱高 =
dr["G"], 重量 = dr["Weight"], 批次 = dr["batchID"], 箱号 = dr["boxID"] });
}
return list;
}
json.Data = list;
json.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return json;
}
public delegate List<dynamic> getActionList(string Str_info);
原文:http://www.cnblogs.com/CarzySunshine/p/6283268.html