如何与领导相处.doc
第8章 常用类型
08号 李东
这章主要介绍了.NET类库中的几个常用类型,其中包括封装了大量初等数学函数的Math类,Math是一个静态类,它的静态方法提供指数函数,对数函数和
String类提三角函数等数学函数的计算功能。表示时间日期的DateTime结构,供了丰富的字符串处理功能,StringBuilder类则能故实现对字符串的动态管理。ArrayList,Queue和Stack为集合型元素管理提供了不同的存储结构。 8.1 Math类
Math类是System程序集中的一个静态类。它定义了两个静态常量字段E和PI,分别表示自然对数e和圆周率π;而它的一组静态方法则实现了大多数初等函数的计算功能。其中包括常用方法:
?Abs(求绝对值),Ceiling(求大于或等于制定数值的最小整数),Floor(求小于或等指定数值的最大整数),Round(对数值进行四舍五入)。
?Exp(求e的指幂数),Pow(指数函数),Log(对数函数),Log10(求以10为底的对数),Sqrt(求平方根)。
?Sin(正弦函数),Cos(余弦函数),Tan(正切函数)。
?Sinh(双曲正弦函数),Cosh(双曲余弦函数),Tanh(双曲正切函数)。
Asin(反正弦函数),Acos(反余弦函数),Atan(反正切函数)。 ?
除了取整运算外,其余大部分方法的参数和返回类型都是double。此外, 有关三角函数的计算都是以弧度为单位的,在程序中使用角度时要注意单位换算。
8.2 字符串类型
8.2.1 构造和比较
C#中使用关键字stringl来定义字符串类型,原型为.NET库中的System.String
类。构造字符串对象最简单的方法是使用一对双引号中的字符串直接赋值。 String s1=””;//空字符串
String s2=”hello”;
再有一种方法就是调用String类的构造函数,其构造函数有多种重载形式,它们主要通过字符来构造字符串。
String s1=new string(„a?,4); //s1=”aaaa”
Char[] chs=new char[] {„m?,?i?.?c?.?r?,?o?,?s?,?o?,?r?,?t?,};
String s2=new string(chs); //s2=”microsoft”
String类的公有属性Length表示字符串的长度,和数组类似。String类提供了一个静态字段Empty,它表示一个空字符串,即string。Empty==””始终成立。 提示:空字符串表示长度为0的字符串对象,而null表示空引用,二者是不同的。例如空字符串的Length属性值为0;对值为null 的字符串变量调用Length属性则会引发异常。
字符串相等定义:字符串长度相等,而且各位字符对应相等。 String类的比较方法:Compare和CompareTo,二者形式基本相同,只是前者是静态方法,后者为实例方法。她妈对两个字符串的比较都是从第一个字符开始,如两个字符不相等则直接返回结果,否则继续比较第二个字符,直至结束。如果第一个字符串的字符排序在第二个字符串之前,方法返回一个负整数,否则返回一个正整数,相等时返回0。
String s="branch";
int i=s.CompareTo("brand"); //i=-1
I=String.Compare("branch","brand") //i=-1
8.2.2 字符操作
字符串类似于字符数组,最常见的就是通过索引函数来获取指定位置的字符(下标从0开始)。不过String类的索引函数是只读的。因此不能像数组那样直接修改字符串中的某个字符,例如:
String s="Visual";
S[0]='x'; //错误
基于字符数组的课构造字符串,而使用字符串的ToCharArray方法则可以得到对应的字符数组。该方法有两种重载形式。用法示例:
String s="Microsoft";
Char[] c1=s.ToCharArray(); //将字符串全部转换为字符数组 Char[] c2=s.ToCharArray(5,4); //从字符串的第5个字符起,取连续4个字符组成数组
Console.WriteLine(new string(c1)); //输出"Microsoft" Console.WriteLine(new string(c2)); //输出"soft"
String 类提供了多个在字符串中查找字符的方法,其中IndexOf方法返回指定字符首次出现的位置,重载形式有:
int IndexOf(char):在整个字符串中查找指定的字符。
int IndexOf(char,int):从指定位置开始查找指定的字符。
int IndexOf(char,int,int):从指定位置开始,在指定的范围内查找指定的字符。 只要找到指定的字符,那么该方法就返回字符在字符串中的索引位置;未找到则返回-1.另一个方法LastIndexOf与IndexOf类似,只不过它返回字符最后一次出现的位置。例:
String s="中国电信银行";
Int pos=s.IndexOf('中'); //pos=0
Pos=s.LastIndexOf('中'); //pos=1
Pos=s.IndexOf('A'); //pos=-1 Pos=s.IndexOf('中',1); //pos=2
还有两个方法IndexOfAny和LastIndexOfAny提供了更为强大的字符查找功能,它们查找的对象是指定字符数组中的任意字符。
String类的方法PadLeft和PadRight分别用于向字符串的左侧和右侧填充字符。
String PadLeft(int):向字符串的左侧填充空格,直至达到参数指定长度。
String PadLeft(int,char):向字符串的左侧填充第二个参数指定的字符,直至 达到第一个参数指定的长度。
和字符填充相反,String类TrimStrat和TrimEnd方法分别从字符串的左侧和右侧删除字符的,Trim方法则是从两端同时进行删除,它们接受一个字符数组作为参数,数组中的字符都会被删除。例如:
String s="列 车 时 刻 表"; //sLength=9 s=s.PadLeft(12,'*'); //s="***列 车 时 刻 表"(左边填充3个字符) s=s.PadRight(15,'*'); //s="***列 车 时 刻 表***"(右边填充3个字符) char[] chs={'列','车','*',' ' };
s=s.TrimStart(chs); //s="时 刻 表***"
8.2.3 子串操作
前面的说到的IndexOf和LastIndexOf方法不仅可查找指定字符,还可查找指定子串,其返回的结果是子串的首字符位置。
String 类的StartWith方法和EndsWith方法分别用于判断字符串是否以指定的子串开始和结束。而Contains方法则判断字符串是否包含指定子串。
string s="microsoft";
Bool b=s.StartsWith("soft"); //b=false
b=s.EndsWith("soft"); //b=true
b=s.Contain("soft"); //b=true
String类的Substring方法用于从字符串中截取一个字串。
String类的Remove方法用于从字符串中删除指定子串。
String 类的Insert方法是在字符串的指定位置插入一个子串。
String 类中Replace的方法也很有用,有两种重载形式:
string Replace(char,char):将字符串中出现的所有指定字符都替换为一个新字符 string Replace(string,string):将字符串中出现的所有指定子串都替换为一个新子串,其中被替换的子歘 不能是空字符串。
前一种重载形式用于字符替换,永远不会改变字符串的长度。后一种用于子串替换
String类也重载假发操作符“+”,用于两个字符串的连接,而string类的静态方法Concat则可以实现更为强大的字符串连接功能:
string s=string.Concat("公元",DataTime.Now.Year,"年");
',31.'日'); s =string.Concat(s,12,'月
s =string.Concat(s,' ',23,':',59,':',"00");
8.2.4格式化与解析
String提供了一个静态方法Format,用于通过指定的参数开格式化一个字符串,这和Consolel类的静态方法WriteLine极为相似,例如:
int x=2,y=4;
string s=string. Format,(“{0}^{1}={2}”,x,y,x<
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
就是不可改变的。
StringBuilder类方便对同一个字符串的频繁操作,即允许直接修改字符串本身的类容,而不是每次操作都生成新串。六种重载形式:
Stringbuilder()
Stringbuilder(int)
Stringbuilder(int,int)
Stringbuilder(string)
Stringbuilder(string,int)
Stringbuilder(string,int,int,int) Stringbuilder类特有的三个方法是Append,AppendLine和AppendFormat,它们都用于在字符串的尾端追加新的内容。Append方法用于追加一个新串,AppendLine方法还可以追加一个换行符,而AppendFormat可视为两者的组合:它先对字符串进行参数格式化,然后将得到的字符串追加到字符串的尾端。 8.3 DateTime结构
对一个DateTime对象而言,其各个时间部分可通过Year,Month,Day,hour,Minute,Second,Millisecond这些实例属性获得,通过DayOfWeek和DayOfYear还能知道当天是一周和一年中第几天。
DateTime dt1=new DateTime(2012,12,31) int x=dt1.Year-2000; //x=12
Console.WriteLine(x=dt1.Month); //输出true Console.WriteLine(x=dt1.DayOfWeek); //输出monday Console.WriteLine(x=dt1.DayOfYear); //输出366 Console.WriteLine("{0}时{1}分",dt1.Hour,dt1.Minute); //输出"0时0分" 通过DateTime的静态属性Now课获得当前时间。Today课获得当前的时间的日期部分。
Console.WriteLine(DateTime.Now) Console.WriteLine(DateTime.Now.Date==DateTime.Today)
上面的成员都是只读的,不能通过它们直接设置时间值。 DateTime提供了一系列形如AddXXXs的成员方法。
DateTime还提供了字符串解析的Parse和TryPrase方法,以及转换到字符串ToString方法。
8.4集合类型
1、列表类ArrayList
和数组不同,ArrayList采用动态链表结构,就是一个元素通过指针指向一个元素,因此能够方便地进行追加,插入,和删除元素的操作。
ArrayList集合的长度是通过属性Count来访问的。此外,它支持foreach循环遍历。ArrayList的Remove和RemoveAt方法用于删除元素,其中前一个方法的参数类型为Object,表示要删除的元素。后一个方法的参数类型为int,表示要删
除的元素索引位置(下标也是从0开始)
List1.Remove("张某"); //删除值为"张某"的元素,为找到则不执行任何操作 List1.RemoveAt(1); //删除第2个元素
ArrayList的Contains方法用于判断列表是否包含指定的元素。IndexOf返回指定
)。ArrayList还提供对元素进行二分查找的元素在列表的位置(不存在则返回-1
BinarySearch方法和进行快速查找的Sort方法。
2、队列类Queue
Queue也是通过Count属性来获取队列的长度的,同时也支持foreach遍历循环。Enqueue方法用于追加新元素,Dequeue方法用于取出队首元素,peek方法则只读取队首元素,但元素不出队。
3、堆栈类Stack
堆栈是先入后出的数据结构,每次只能访问栈顶的元素,且新元素只能加入到栈顶,Stack类的push和pop分别用于新元素的进栈和出栈。Peek方法则是只读取栈顶元素。
8.5 Type类型
GetType方法总是返回对象的实际类型而非声明类型。C#还提供了一个操作符typeof,它根据一个类型名来返回相应的Type对象,
Console.WriteLine(typeof(int));
Int x=10;
Console.WriteLine(x.GetType()==typeof(int)); //输出 true 通过type类的BaseType课获取基类类型,通过
IsClass,IsInterface,IsValueType,IsEnum等属性课判断类型是否为类,接口,结构或枚举;GetMembers课获取类型的所有成员集合。每个成员的类型为MenberInfo;而通过GetFields,GetProperties,GetMethods等方法则可以获取字段,属性,方法等专门的集合。具体的成员类型可分别为FieldInfo,PropertyInfo,MethodInfo等,它们都在System.Reflection命名空间中定义。