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,完全有可能在流里面发生其他异常,但注意不应该在这里处理它们,其实很可能我们也不知道怎么处理这些异常,多数情况下会轻易地丢弃它们。
{
using (XmlReader topicReader = XmlReader.Create (xmlStream, readersetting))
{
// xml processing
}
}
catch (XmlException ex)
{
// handler xml exception only
}
联系到一个常见的问题,集中处理异常还是分散处理?我们的经验,异常应该被捕捉在能处理它们的场合,否则你很可能掩盖它们。
2、什么时候捕捉一般异常(Exception)?
我们可以经常在代码里看到:
{
//
![](https://www.cnblogs.com/Images/dot.gif)
}
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类型):对象实例,其中包含了要调用的方法。