1. 正则表达式
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。正则表达式由literals(字面值)、metacharacters(元字符)两类字符组成。字面值是你想要通配的字符,元字符是正则表达式使用的特殊字符,像是一种命令,使正则表达式具有相应功能。
假设你在一篇英文小说里查找hi,你可以使用正则表达式hi。这几乎是最简单的正则表达式了,它可以精确匹配这样的字符串:由两个字符组成,前一个字符是h,后一个是i。通常,处理正则表达式的工具会提供一个忽略大小写的选项,如果选中了这个选项,它可以匹配hi,HI,Hi,hI这四种情况中的任意一种。不幸的是,很多单词里包含hi这两个连续的字符,比如him,history,high等等。用hi来查找的话,这里边的hi也会被找出来。如果要精确地查找hi这个单词的话,我们应该使用\bhi\b。\b是正则表达式规定的一个特殊代码,代表着单词开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。
这就是正则表达式的功能,在很多文本编辑器里,用于检索、替换那些符合某个模式的文本。
然而正则表达式是有缺陷的
当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。
有时,我们更需要匹配尽可能少的字符。前面给出的限定符都可以被转化为另一种模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。
2. 委托
delegate是表示对具有特定参数列表和返回类型的方法的引用的类型。 在实例化委托时,我们可以将其实例与任何具有兼容签名和返回类型的方法相关联。 我们可以通过委托实例调用方法。委托用于将方法作为参数传递给其他方法。 事件处理程序就是通过委托调用的方法。 我们可以创建一个自定义方法,当发生特定事件时,某个类(如 Windows 控件)就可以调用我们的方法。
可将任何可访问类或结构中与委托类型匹配的任何方法分配给委托。 该方法可以是静态方法,也可以是实例方法。 这样便能通过编程方式来更改方法调用,还可以向现有类中插入新代码。
委托具有以下属性:
1)委托类似于 C++ 函数指针,但它们是类型安全的。
2)委托允许将方法作为参数进行传递。
3)委托可用于定义回调方法。
4)委托可以链接在一起;例如,可以对一个事件调用多个方法。
5)方法不必与委托类型完全匹配。
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
委托是可以定义的,当然也是可以禁止的。
委托的定义通常类似于变量,区别不大。