int[] a2=new int[3]{1,2,3};//此格式也正确
int[] a3={1,2,3};//相当于int[] a3=new int[]{1,2,3};
int[,] a4=new int[,]{{1,2,3},{4,5,6}};//二维数组,a4[1,1]=5
int[][] j2=new int[3][];//定义数组j2,有三个元素,每个元素都是一个数组 j2[0]=new int[]{1,2,3};//定义第一个元素,是一个数组
j2[1]=new int[]{1, 2, 3, 4, 5, 6};//每个元素的数组可以不等长 j2[2]=new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9}; 1.4.10 字符串类(string类) C#还定义了一个基本的类string,专门用于对字符串的操作。这个类也是在名字空间System中定义的,是类System.String的别名。字符串应用非常广泛,在string类的定义中封装了许多方法,下面的一些语句展示了string类的一些典型用法: ? 字符串定义
string s;//定义一个字符串引用类型变量s
s=\字符串引用类型变量s指向字符串\string FirstName=\string LastName=\
string Name=FirstName+\运算符+已被重载 string SameName=Name;
char[] s2={'计','算','机','科','学'}; string s3=new String(s2); ? 字符串搜索
string s=\科学\int i=s.IndexOf(\科\
搜索\科\在字符串中的位置,因第一个字符索引为0,所以\索引为0,\科\索引为3,因此这里i=3,如没有此字符串i=-1。注意C#中,ASCII和汉字都用2字节表示。 ? 字符串比较函数 string s1=\string s2=\
int n=string.Compare(s1,s2);//n=0
n=0表示两个字符串相同,n小于零,s1
if(s==s1)//还可用!=。虽然String是引用类型,但这里比较两个字符串的值 s2=\相同\
? 判断是否为空字符串 string s=\string s1=\不空\if(s.Length==0) s1=\空\
? 得到子字符串或字符 string s=\取子字符串\
string sb=s.Substring(2,2);//从索引为2开始取2个字符,Sb=\字符\内容不变
char sb1=s[0];//sb1='取'
Console.WriteLine(sb1);//显示:取 ? 字符串删除函数 string s=\取子字符串\
string sb=s.Remove(0,2);//从索引为0开始删除2个字符,Sb=\字符串\内容不变 ? 插入字符串
string s=\计算机科学\
string s1=s.Insert(3,\软件\计算机软件科学\,s内容不变 ? 字符串替换函数 string s=\计算机科学\
string s1=s.Replace(\计算机\软件\软件科学\,s内容不变 ? 把String转换为字符数组 string S=\计算机科学\
char[] s2=S.ToCharArray(0,S.Length);//属性Length为字符类对象的长度 ? 其它数据类型转换为字符串 int i=9;
string s8=i.ToString();//s8=\float n=1.9f;
string s9=n.ToString();//s8=\
其它数据类型都可用此方法转换为字符类对象 ? 大小写转换 string s=\
string s1=s.ToLower();//把字符转换为小写,s内容不变 string s2=s.ToUpper();//把字符转换为大写,s内容不变 ? 删除所有的空格 string s=\
s.Trim();//删除所有的空格
string类其它方法的使用请用帮助系统查看,方法是打开Visual Studio.Net的代码编辑器,键入string,将光标移到键入的字符串string上,然后按F1键。 1.4.11 类型转换
在编写C#语言程序中,经常会碰到类型转换问题。例如整型数和浮点数相加,C#会进行隐式转换。详细记住那些类型数据可以转换为其它类型数据,是不可能的,也是不必要的。程序员应记住类型转换的一些基本原则,编译器在转换发生问题时,会给出提示。C#语言中类型转换分为:隐式转换、显示转换、加框(boxing)和消框(unboxing)等三种。 一. 隐式转换
隐式转换就是系统默认的、不需要加以声明就可以进行的转换。例如从int类型转换到long类型就是一种隐式转换。在隐式转换过程中,转换一般不会失败,转换过程中也不会导致信息丢失。例如: int i=10; long l=i;
二. 显示转换
显式类型转换,又叫强制类型转换。与隐式转换正好相反,显式转换需要明确地指定转换类型,显示转换可能导致信息丢失。下面的例子把长整形变量显式转换为整型: long l=5000;
int i=(int)l;//如果超过int取值范围,将产生异常 三. 加框(boxing)和消框(unboxing)
加框(boxing)和消框(unboxing)是C#语言类型系统提出的核心概念,加框是值类型转换为object(对象)类型,消框是object(对象)类型转换为值类型。有了加框和消框的概念,对任何类型的变量来说最终我们都可以看作是object类型。 1 加框操作
把一个值类型变量加框也就是创建一个object对象,并将这个值类型变量的值复制给这个object对象。例如: int i=10;
object obj=i;//隐式加框操作,obj为创建的object对象的引用。 我们也可以用显式的方法来进行加框操作,例如: int i =10;
object obj=object(i);//显式加框操作 值类型的值加框后,值类型变量的值不变,仅将这个值类型变量的值复制给这个object对象。我们看一下下面的程序: using System class Test
{ public static void Main() { int n=200; object o=n;
o=201;//不能改变n
Console.WriteLine(\} }
输出结果为:200,201。这就证明了值类型变量n和object类对象o都独立存在着。 2. 消框操作
和加框操作正好相反,消框操作是指将一个对象类型显式地转换成一个值类型。消框的过程分为两步:首先检查这个object对象,看它是否为给定的值类型的加框值,如是,把这个对象的值拷贝给值类型的变量。我们举个例子来看看一个对象消框的过程: int i=10; object obj=i;
int j=(int)obj;//消框操作
可以看出消框过程正好是加框过程的逆过程,必须注意加框操作和消框操作必须遵循类型兼容的原则。
3. 加框和消框的使用 定义如下函数:
void Display(Object o)//注意,o为Object类型 { int x=(int)o;//消框
System.Console.WriteLine(\}
调用此函数:int y=20;Display(y);在此利用了加框概念,虚参被实参替换:Object o=y,也就是说,函数的参数是Object类型,可以将任意类型实参传递给函数。 1.5 运算符
C#语言和C语言的运算符用法基本一致。以下重点讲解二者之间不一致部分。
1.5.1 运算符分类
与C语言一样,如果按照运算符所作用的操作数个数来分,C#语言的运算符可以分为以下几种类型:
? 一元运算符:一元运算符作用于一个操作数,例如:-X、++X、X--等。 ? 二元运算符:二元运算符对两个操作数进行运算,例如:x+y。 ? 三元运算符:三元运算符只有一个:x? y:z。
C#语言运算符的详细分类及操作符从高到低的优先级顺序见下表。 类别 操作符
初级操作符 (x) x.y f(x) a[x] x++ x-- new type of sizeof checked unchecked 一元操作符 + - ! ~ ++x –x (T)x 乘除操作符 * / % 加减操作符 + - 移位操作符 << >>
关系操作符 < > <= >= is as 等式操作符 == != 逻辑与操作符 & 逻辑异或操作符 ^ 逻辑或操作符 | 条件与操作符 && 条件或操作符 || 条件操作符 ?:
赋值操作符 = *= /= %= += -= <<= >>= &= ^= |= 1.5.2 测试运算符is
is操作符用于动态地检查表达式是否为指定类型。使用格式为:e is T,其中e是一个表达式,T是一个类型,该式判断e是否为T类型,返回值是一个布尔值。例子: using System; class Test
{ public static void Main()
{ Console.WriteLine(1 is int); Console.WriteLine(1 is float); Console.WriteLine(1.0f is float); Console.WriteLine(1.0d is double); } }
输出为: True False True True
1.5.3 typeof运算符
typeof操作符用于获得指定类型在system名字空间中定义的类型名字,例如: using System; class Test
{ static void Main()
{ Console.WriteLine(typeof(int));
Console.WriteLine(typeof(System.Int32)); Console.WriteLine(typeof(string)); Console.WriteLine(typeof(double[])); } }
产生如下输出,由输出可知int和System.int32是同一类型。 System.Int32 System.Int32 System.String System.Double[]
1.5.4 溢出检查操作符checked和unchecked
在进行整型算术运算(如+、-、*、/等)或从一种整型显式转换到另一种整型时,有可能出现运算结果超出这个结果所属类型值域的情况,这种情况称之为溢出。整型算术运算表达式可以用checked或unchecked溢出检查操作符,决定在编译和运行时是否对表达式溢出进行检查。如果表达式不使用溢出检查操作符或使用了checked操作符,常量表达式溢出,在编译时将产生错误,表达式中包含变量,程序运行时执行该表达式产生溢出,将产生异常提示信息。而使用了unchecked操作符的表达式语句,即使表达式产生溢出,编译和运行时都不会产生错误提示。但这往往会出现一些不可预期的结果,所以使用unchecked操作符要小心。下面的例子说明了checked和unchecked操作符的用法: using System; class Class1
{ static void Main(string[] args) { const int x=int.MaxValue; unchecked//不检查溢出
{ int z=x*2;//编译时不产生编译错误,z=-2 Console.WriteLine(\显示-2 }
checked//检查溢出
{ int z1=(x*2);//编译时会产生编译错误 Console.WriteLine(\ } } }
1.5.5 new运算符
new操作符可以创建值类型变量、引用类型对象,同时自动调用构造函数。例如: int x=new int();//用new创建整型变量x,调用默认构造函数
Person C1=new Person ();//用new建立的Person类对象。Person 变量C1对象的引用 int[] arr=new int[2];//数组也是类,创建数组类对象,arr是数组对象的引用 需注意的是,int x=new int()语句将自动调用int结构不带参数的构造函数,给x赋初值0,x仍是值类型变量,不会变为引用类型变量。 1.5.6 运算符的优先级
当一个表达式包含多种操作符时,操作符的优先级控制着操作符求值的顺序。例如,表达式x+y*z按照x+(y*z)顺序求值,因为*操作符比+操作符有更高的优先级。这和数学运算中的先
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C#入门经典第三版(最新)(3)在线全文阅读。
相关推荐: