拒绝try.catch泛滥,学习委托有感
读了一位博友关于使用委托避免重复的try.catch的随笔(原文地址:http://www.cnblogs.com/foolishfox/archive/2010/07/30/1788416.html),有点感想,写下来与大家分享.
补充一下原文的例子:
public class CatchExceptions{ /// <summary> /// 捕获异常的方法 /// </summary> /// <param name="func">绑定到委托的方法</param> /// <returns>异常信息,如果为空则没有产生异常</returns> public static string TryCatch(Action func) { string runMsg = string.Empty; try { func(); } catch (Exception ex) { runMsg = ex.Message; } return runMsg; } /// <summary> /// 捕获异常的方法 /// </summary> /// <typeparam name="T">委托的参数类型</typeparam> /// <param name="func">绑定到委托的方法</param> /// <param name="param">委托的参数实例</param> /// <returns>异常信息,如果为空则没有产生异常</returns> public static string TryCatch<T>(Action<T> func, T param) { string runMsg = string.Empty; try { func(param); } catch (Exception ex) { runMsg = ex.Message; } return runMsg; } /// <summary> /// 捕获异常的方法 /// </summary> /// <typeparam name="T1">委托的第一个参数类型</typeparam> /// <typeparam name="T2">委托的第二个参数类型</typeparam> /// <param name="func">绑定到委托的方法</param> /// <param name="param1">委托的第一个参数实例</param> /// <param name="param2">委托的第二个参数实例</param> /// <returns></returns> public static string TryCatch<T1, T2>(Action<T1, T2> func, T1 param1, T2 param2) { string runMsg = string.Empty; try { func(param1, param2); } catch (Exception ex) { runMsg = ex.Message; } return runMsg; }} |
原文使用的是Func而此处使用的是Action,到底Func和Action有什么区别呢?
Action委托 表示 封装一个方法,该方法不具有参数并且不返回值
Action<T>委托 是Action的泛型委托 表示封装一个方法,该方法拥有一个参数并且不返回值
Action<T>委托多参数的形式为 Action<T1,T2,T3.....> 且最多只能有16个参数
再来看看Func委托.
Func<TResult>委托 表示 封装一个没有参数但返回TResult类型的值的方法
Func<T,TResult>委托 表示 封装一个有一个参数但返回TResult类型的值的方法
Func<T,TResult>的多参数形式为 Func<T1,T2,T3.....,TResult> 且最多只能有16个参数
所以上述TryCatch方法的参数到底用Action还是Func取决于实际的使用情况,如果需要绑定到委托的方法有返回值,使用Func,如果没有返回值,则使用Action
方法定义好了,如果调用呢?
这里我们定义一个有参数的方法和一个无参的方法
private void DeleteObj(int objID){ //主体省略...} |
|
private void AddObj(){//主体省略...} |
分别在添加和删除Button的OnClick()方法中调用
protected void btnSave_Click(object sender, EventArgs e){ string runMsg = CatchExceptions.TryCatch(AddObj); Response.Write(runMsg.Length > 0 ? "添加失败!" + runMsg : "添加成功");} |
|
protected void btnDelete_Click(object sender, EventArgs e){ string runMsg = CatchExceptions.TryCatch(DeleteObj,objID); Response.Write(runMsg.Length > 0 ? "删除失败!" + runMsg : "删除成功");} |
拒绝try.catch泛滥,学习委托有感的更多相关文章
- 学习nodejs有感
接触nodejs一段时间了,不断的去接触接触,nodejs是一个能让前端程序员做后台开发的一项技术. 随着学习,让我更好的理解了前后端,以及浏览器是如何运作的
- C#高级--通过类来理解学习委托
namespace classanddelegate { class Program { static void Main(string[] args) { //这是类的实例化 Test test = ...
- Android系统移植与驱动开发--第三章 Git使用入门及在学习中有感
第三章 Git使用入门 使用Git的目的是减少各种版本的Linux的压缩大小,提供源代码在Linux上进行编译. 在这一个章节中,其实就是关键步骤的操作,虽然Git与我们学习的android没有很大的 ...
- C#深度学习の委托深度解析
一.我们在使用C#的过程中,不可避免的用到了委托. 委托的本质是什么呢? 从语法上看,委托是对方法的抽象封装,例如:public void print1(),public void print2(), ...
- java try·····catch·····异常处理学习
异常处理(又称为错误处理)功能 用于处理软件或信息系统中出现的异常状况(即超出程序正常执行流程的某些特殊条件). try....catch....只是异常处理的一种常用方法 try{ //可能导致异常 ...
- [C# 学习]委托和线程
委托有点像C语言的函数指针,简单总结一下如何使用委托. 1. 声明一个委托 public delegate void LabelSetEventHandler(Label la, string str ...
- 学习正则有感by魔芋(命名问题)
魔芋: 事实上,我是反感一些特殊的名词.一些名词看上去就让人感觉到抗拒. 关于一个概念用不同的名词来定义,简直是太糟糕了. 举个例子: 匹配一个后面带有exp2的exp1的正则. 写法: exp1(? ...
- 学习Maven有感
1.maven的由来 maven是一款服务于java平台的自动化构建工具 构建定义:把动态的Web工程经过编译得到的编译结果部署到服务器上的整个过程. 编译:java源文件[.java]->编译 ...
- php自定义错误处理和try{}catch(){}学习
<?php //语法错误 //运行时的错误 //逻辑错误 //php的错误报告级别 // display_errors; // ini_set("display_errors" ...
随机推荐
- [转载]我的WCF之旅(1):创建一个简单的WCF程序
为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用.本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本结构.对那些对WCF不是很了解的读者来说,这个例 ...
- web初学之MVC
之前对JavaEE的MVC模式有些许了解,但一直没有很好的掌握,在读代码时候也很模糊不清.因此对MVC又通过各种资料有了全面的理解. 一.首先,需要从了解JavaEE技术开始.JavaEE技术在设计程 ...
- SQLserver 查看数据库包含指定数据的表(字段)
找出所有字段 1 select a.name as columnname,object_name(a.id)as tablename into t from syscolumns a, sysobje ...
- crm 2013邮箱设置 “允许使用凭据进行电子邮件处理” 被禁用的解决
记录一下: 在CRM 2013/2015的邮箱设置时发现“允许使用凭据进行电子邮件处理” 选项被禁用而且无法输入凭证(如下图): 查阅官方说明得知考虑邮件安全性只能在IFD部署或https访问模式下才 ...
- 将复杂查询写到SQL配置文件--SOD框架的SQL-MAP技术简介
引言 今天看到一片热门的博客, .NET高级工程师面试题之SQL篇 ,要求找出每一个系的最高分,并且按系编号,学生编号升序排列.这个查询比较复杂,也比较典型,自从用了ORM后,很久没有写过SQL语句了 ...
- Spring+springmvc+Mybatis整合案例 xml配置版(myeclipse)详细版
Spring+springmvc+Mybatis整合案例 Version:xml版(myeclipse) 文档结构图: 从底层开始做起: 01.配置web.xml文件 <?xml version ...
- EditTextPreference点击后输入框显示隐藏内容,类似密码输入(转)
http://bbs.anzhuo.cn/thread-928131-1-1.html EditTextPreference点击后输入框显示隐藏内容,类似密码输入... [复制链接] aski ...
- sql server 查询和Kill死锁进程
查询死锁进程语句 select request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tab ...
- SOCKS 5协议详解(转)
笔者在实际学习中,由于在有些软件用到了socks5(如oicq,icq等),对其原理不甚了解,相信很多朋友对其也不是很了解,于是仔细研读了一下rfc1928,觉得有必要译出来供大家参考. 1.介绍: ...
- Linux上的常用软件
zsh (fish): a new shell oh my zsh: zsh's conf file apvlv: pdf viewer(vim style) autojump: quick 'cd'