C#之正则表达式、异常处理和委托与事件
正则表达式主要是为了处理和模式匹配复杂的字符串。
int myInteger = 5;
string intergerString = myInteger.ToString();
就是将myInteger调用int类型的ToString()函数将其转化成string类型的。而且string类还提供了很多对其进行操作的方法。
String类还提供了subString()重载方法。
Split()是获取字串的好方法,参数是一个用来分隔单词的字符数组。
StringBuilder与String不同。StringBuilder是可变的,修改时改的是实际原字符串。可以将上述代码中的string output转换成StringBuilder output = new StringBuilder();
这里面s1中,后面有个空格也被当成字串读出了。
1、在哪里处理异常?在异常发生的地方还是让它冒泡到主程序?
我们的原则:永远不处理你不知道怎么处理的异常,换句话说,永远不遮掩异常。
下面的例子里面,我们在处理一个XML流,所以只捕捉XmlException,完全有可能在流里面发生其他异常,但注意不应该在这里处理它们,其实很可能我们也不知道怎么处理这些异常,多数情况下会轻易地丢弃它们。
try
{
using (XmlReader topicReader = XmlReader.Create (xmlStream, readersetting))
{
// xml processing
}
}
catch (XmlException ex)
{
// handler xml exception only
}
联系到一个常见的问题,集中处理异常还是分散处理?我们的经验,异常应该被捕捉在能处理它们的场合,否则你很可能掩盖它们。
2、什么时候捕捉一般异常(Exception)?
我们可以经常在代码里看到:
try
{
//
}
catch (Exception ex)
{
// empty code block
}
除了在主程序,永远不要捕捉它,除非你有特别的理由,因为你很可能违反了前一条,掩盖了你不知道的异常。但还是有少数情况,你需要捕捉它,一定特别说明,并在项目小组里一致通过。这个看似容易,其实很难(以我们的经验),程序员已经习惯了上述的写法,甚至变得不知道应该捕捉什么异常了,当有需要的时候,try catch block covers everything.
委托和事件:
1. 委托:一个能够表示方法的数据类型;它将方法作为对象封装起来,允许在运行时间接地绑定一个方法调用。
2. 声明委托数据类型:
public delegate bool GreaterThanHandler(int first , int second);
3. 委托的实例化:
为了实例化委托,需要和委托类型自身的签名对应的一个方法;实例时不必用new来实例化该类的实例,直接传递名称即可[C>.0新语法]。 如:
GreaterThanHandler a = 方法名;
C>.0以前的语法:
GreaterThanHandler a = new GreaterThanHandler (方法名) ;
4. 匿名方法:
匿名方法没有实际方法声明的委托实例,它们的定义是直接内嵌在代码中的。如:
GreaterThanHandler a = delegate(int first , int second){return (first<second);};
5. 委托的内部机制:
C#将所有委托定义成间接派生于System.Delegate ,这个类有两个属性:(1)MethodInfo(System.Reflection.MethodInfo类型): 定义了一个特定方法签名(包括方法的名称、参数和返回类型) (2)Target(Object类型):对象实例,其中包含了要调用的方法。
C#之正则表达式、异常处理和委托与事件的更多相关文章
- [转载]C#委托和事件(Delegate、Event、EventHandler、EventArgs)
原文链接:http://blog.csdn.net/zwj7612356/article/details/8272520 14.1.委托 当要把方法作为实参传送给其他方法的形参时,形参需要使用委托.委 ...
- 重读C#委托、事件有感
去年学习C#的时候按照进度把C#的委托和事件“认真”的学习了一下,自己知道委托和事件的重要性,所以也努力的学习,可说实也没怎么学懂.碰巧这段时间在做一个解析GPS数据的小项目,因为其中有需要条件自动判 ...
- c#中委托和事件(续)(转)
本文将讨论委托和事件一些更为细节的问题,包括一些大家常问到的问题,以及事件访问器.异常处理.超时处理和异步方法调用等内容. 为什么要使用事件而不是委托变量? 在 C#中的委托和事件 中,我提出了两个为 ...
- 第一章、C#委托和事件(Delegate、Event、EventHandler、EventArgs)
第一章.C#委托和事件(Delegate.Event.EventHandler.EventArgs) 分类: 学习笔记-C#网络编程2012-12-08 14:10 7417人阅读 评论(3) 收藏 ...
- c#委托和事件(下) 分类: C# 2015-03-09 08:42 211人阅读 评论(0) 收藏
C#中的委托和事件(下) 引言 如果你看过了 C#中的委托和事件 一文,我想你对委托和事件已经有了一个基本的认识.但那些远不是委托和事件的全部内容,还有很多的地方没有涉及.本文将讨论委托和事件一些更为 ...
- C#中委托和事件
目 录 将方法作为方法的参数 将方法绑定到委托 更好的封装性 限制类型能力 范例说明 Observer 设计模式简介 实现范例的Observer 设计模式 .NET 框架中的委托与事件 为什么委托定义 ...
- 委托、Lambda表达式、事件系列06,使用Action实现观察者模式,体验委托和事件的区别
在"实现观察者模式(Observer Pattern)的2种方式"中,曾经通过接口的方式.委托与事件的方式实现过观察者模式.本篇体验使用Action实现此模式,并从中体验委托与事件 ...
- .NET面试题系列[7] - 委托与事件
委托和事件 委托在C#中具有无比重要的地位. C#中的委托可以说俯拾即是,从LINQ中的lambda表达式到(包括但不限于)winform,wpf中的各种事件都有着委托的身影.C#中如果没有了事件,那 ...
- .NET基础拾遗(4)委托、事件、反射与特性
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
随机推荐
- HDU 5920 Ugly Problem
说起这道题, 真是一把辛酸泪. 题意 将一个正整数 \(n(\le 10^{1000})\) 分解成不超过50个回文数的和. 做法 构造. 队友UHC提出的一种构造方法, 写起来比较方便一些, 而且比 ...
- HTML5系列二(标签元素、FileReader、拖放)
nav元素的使用场合 页面中可以包含多个nav元素,通常情况下头部和尾部都会包含导航,这样提高了可访问性,访客能够清晰的将其辨认出来.nav元素是一个可以用来作为页面导航的链接组:其中的导航元素链接到 ...
- iOS - nil null Nil笔记
今天查看Nullability and Objective-C发现里面提到了nil和Null等关键字,做一下笔记. nil -> Null-Pointer to Objective-C O ...
- 机器学习---python环境搭建
一 安装python2.7 去https://www.python.org/downloads/ 下载,然后点击安装,记得记住你的安装路径,然后去设置环境变量,这些自行百度一下就好了. 由于2.7没有 ...
- DRY原则
DRY--Don't Repeat Yourself Principle,直译为"不要重复自己"原则 DRY简而言之,就是不要写重复的代码.原则本身很简单,但是,对于OOAD(面向 ...
- MyISAM与InnoDB两者之间怎么选择
1.MyISAM不支持事务,InnoDB是事务类型的存储引擎 当我们的表需要用到事务支持的时候,那肯定是不能选择MyISAM了. 2.MyISAM只支持表级锁,BDB支持页级锁和表级锁默认为页级锁,而 ...
- SpringMVC处理请求流程
SpringMVC核心处理流程: 1.DispatcherServlet前端控制器接收发过来的请求,交给HandlerMapping处理器映射器 2.HandlerMapping处理器映射器,根据请求 ...
- 9月9日HTML上午表单元素2(框架、样式表)
五.框架 1.frameset是双标签框架集,如果使用框架集,当前页面不能有body. frameset属性:①cols代表左右拆分.cols=“300,*”表示左边框架宽300,右边宽剩余的宽度.* ...
- 表达式拼接Expression<Func<IEntityMapper, bool>> predicate
/// <summary> /// 重写以筛选出当前上下文的实体映射信息 /// </summary> protected override IEnumerable<IE ...
- rpm 命令
这些事rpm的常用参数!!! 你可以在linux下man 一下rpm就知道了!!! 不过是英文的,不然你可以百度一下rpm就知道了额!!! 下面我帮你贴几个!!!!rpm 常用命令1.安装一个包 # ...