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类型):对象实例,其中包含了要调用的方法。

posted @ 2015-04-20 17:03  鲁仕林  阅读(675)  评论(1编辑  收藏  举报