C# 基础之一

一.c#使用静态成员

类的方法和属性可以是实例成员也可以是静态成员。实例成员与某类型的实例有关,而静态成员则是类的一部分。

例:

一个名为Button的类,实例化该类生成了名为btnUpdate和btnDelete的对象。静态方法SomeMethod(),要访问此方法要写:Button.SomeMethod();

在C#中通过实例访问静态方法或成员变量是不合法的。

C#中不存在全局方法,只有类方法,但可以在类中定义静态方法达到类似的效果。

在C#中,static关键字表示一个类成员。

静态方法可以在没有实例的情况下调用它们,名字作用域仍然在类中,类名很像命名空间。

静态方法可以接受实例成员作为参数,它的作用域在类中,而不是全局,它可以访问实例的私有成员。//它指实例成员参数

静态方法是在类上而不是在类的实例上操作,它们没有this引用

静态方法不能直接访问非静态成员,如果Main()要调用非静态方法,它必须实例化一个对象。

 

二《JavaScript高级程序设计》笔记之'正则表达式'

正则表达式是具有特殊语法的字符串,用来表示指定字符串在另一个字符串中出现的情况。
JavaScript对正则表达式的支持是通过ECMAScript中的RegExp类实现的。

1.RegExp对象:
RegExp对象的方法有test()和exec()。属性有g,i,m,lastMatch等。

2.定义方式:
var reCat=new RegExp("cat","gi"); //"g"是global,"i"是case-insensitive
也可以用Perl风格的语法:
var reCat=/cat/gi;

3.元字符
正则表达式用到的所有元字符:( [ { \ ^ $ | ) ? * +
元字符是正则表达式语法的一部分,任何时候要在正则表达式中使用它们,都必须对它们进行转义。如:
var reQMark=/\?/;
或者:var reQMark=new RegExp("\\?");  //注意:这里使用双重转义,以防解析器按\n方式翻译

4.字符类
(1) 简单类
var sToMatch="a bat, a Cat, a fAt baT, a faT cat";
var reBatCatRat=/[bcf]at/gi; //匹配b、c或f
alert(sToMatch.match(reBatCatRat)); //outputs "bat,Cat,fAt,faT,cat" //String对象的match()方法

(2) 负向类
var sToMatch="a bat, a Cat, a fAt baT, a faT cat";
var reBatCatRat=/[^bc]at/gi;
alert(sToMatch.match(reBatCatRat)); //outputs "fAt,faT"

(3) 范围类
var sToMatch="num1,num2,num3,num4,num5,num6,num7,num8";
var reOneToFour=/num[1-4]/gi;
alert(sToMatch.match(reOneToFour)); //outputs "num1,num2,num3, num4"

(4) 组合类
由几中其他类组合成的字符类,如:[a-m1-4\n]。

(5) 预定义类
主要有数字\d(也可表示成[0-9]),空白字符\s,单词\w和\D,\S,\W 如:
var sToMatch="564 891 abc";
var reThreeNums=/\d\d\d/;
alert(reThreeNums.test(sToMatch)); //outputs "true" //RegExp对象的test()方法

5.量词
(1) 简单量词
简单量词包括?,*,+,{n},{n,m},{n,}。举例:
如果想匹配bread,read,red,可以这样:
var reBreadReadRed=/b?rea?d/;
又如想匹配bead,baed,beed,baad,bad,bed,可以这样:
var reB=/b[ea]{1,2}d/;

(2)贪婪的、惰性的、支配性的量词
例如单独一个问号(?)是贪婪的,(??)是惰性的,(?+)是支配的。
贪婪量词先看整个字符串是否匹配。如果不匹配,则去掉该字符串中最后一个字符,并再次尝试。
惰性量词先看字符串中的第一个字母是否匹配,如果不匹配,就继续读入下一个字符。
支配量词只尝试匹配整个字符串。
区别三者,举例:
var sToMatch="abbbaabbbaaabbb1234";
var re1=/.*bbb/g;
var re2=/.*?bbb/g;
var re3=/.*+bbb/g;
如果想匹配"abbb","aabbb"和"aaabbb"只能是re2(第一个"abbb"匹配之后,继续向匹配)。

6.分组
如:var reDogDog=/(dog){2}/g;
等同于 var reDogDog=/(dog)\1/; // "dogdog"
(1) 捕获性分组(反向引用)
举例:调换字符串中两个单词的顺序:
var sToChange="1234 5678";
var reMatch=/(\d{4}) (\d{4})/;
var sNew=sToChange.replace(reMatch,"$2 $1");

alert(sNew); //outputs "5678 1234";

(2) 非捕获性分组
非捕获性分组不创建反向引用,也就避免了存储反向引用带来的速度降低的问题。应用举例:
var reTag=/<(?:.|\s)*>/g;

7.候选
如何匹配"red"和"black"呢?
var sToMatch1="red";
var sToMatch2="black";
var reRedOrBlack=/(red|black)/;
alert(reRedOrBlack.test(sToMatch1)); //outputs "true"
alert(reRedOrBlack.test(sToMatch2)); //outputs "true"

8.前瞻
用"?="表示,如:
var sToMatch1="bedroom";
var sToMatch2="bedding";
var reBed=/bed(?=room)/;
alert(reBed.test(sToMatch1)); //outputs "true"
alert(reBed.test(sToMatch2)); //outputs "false"

9.边界
表示边界的符号有^,$,\b,\B。

10.多行模式(IE不支持)
在正则表达式的后面加一个m.如返回每行结尾的单词:
var sToMatch="First second\nthird fourth\nfifth sixth"
var reLastWord=/(\w+)$/gm;
alert(sToMatch.match(reLastWord)); //outputs "second,fourth,sixth"

posted on 2008-09-28 11:48  leenshan  阅读(187)  评论(0编辑  收藏  举报