c#基础---数据类型

来源:互联网 发布:开盘数据恢复成功率 编辑:程序博客网 时间:2024/05/20 01:38


在C#语言中,符合公共语言规范(CLS)的数据类型可分为两类:值类型和引用类型。这两者有很大的区别,其中值类型变量直接保存变量的值,引用类型的变量保存的是数据的引用地址。当把一个值变量赋给另一个值变量,会在堆栈中保存两个完全相同的值,每个变量都有自己的值,因此对一个变量的操作不会影响到其他变量;而把一个引用变量赋给另一个引用变量,则会在堆栈中保存对同一堆位置的两个引用,对一个变量的数据进行操作就是对这个变量在堆栈中的数据进行操作,另一个变量也跟着改变。

1、值类型

(1)整型


    C#程序中,每个整数类型都对应于System中的一个结构体,例如,整型int所对应的结构是System.Int32,每次定义一个int型的变量,实际上就创建了System.Int32结构的一个变量。这些结构中有一个常用的Parse方法可以进行数据类型转换。例如:

Console. Write("请输入圆的半径值:");

R=double.Parse(Console. ReadLine( ));

分析:ReadLine读入一行字符串,Parse方法就把string转换为其他基本类型。用double调用该方法就把string转换成double类型。

还有可以用ToString将数据转换为字符串,例如:

 int i=int. MaxValue;

 string s=i.ToString( );

 string s=l3.ToString( );                

(2)字符类型

    在C#中,字符类型(char)采用了Unicode字符集,一个Unicode的标准字符长度为16

位(两字节),C#中单个汉字也可以作为字符来使用,如:

                       char a=’共’;

字符类型char代表的是System.Char结构,每声明一个char类型的变量,就创建了

System.Char结构的变量。整数类型不能隐式被转换为字符类型char,例如char c1=10是

错误的,必须写成:char c1=(char)10;

(3)实数类型(浮点型)

C#提供了3种实数类型:单精度类型(float)、双精度类型(double)和十进制小数类型(decimal)。



C#默认的字面上的实数是double类型,要声明float和decimal类型,还需要在小数后面加上后缀F和M,例如:1.2;    1.2F;    1.2M。float、double和decimal类型实际分别代表了System.Single、System.Double和System.Decimal结构。

(4)布尔类型

布尔类型(bool )表示布尔逻辑量,取值只能是true或者false,表示“真”和“假” 这两个概念。

                bool b1=true;         bool b2=false;

C#中的bool类型对应于System.Boolean结构。虽然只有两个取值,但它占4个字节。布尔类型和其他数值之间不存在任何对应关系。不能认为整数0是false,其他值是true。bool x=1 是错误的

(5)枚举类型

枚举类型也一种复合值类型,主要用于表示一组逻辑上相关联的项的组合,使用关键字enmu来定义。

enum Weekday { Sunday,Monday, Tuesday,Wednesday, Thursday, Friday,Saturday };

Weekday w1;

w1=Weekday.Monday;  

2、引用类型

引用类型包括类(class)、接口(interface)、委托(delegate)和数组(array)。引用类型的变量也叫对象。



   数组类型都是从System.Array类派生而来的,因而可以直接使用System.Array类所有的属性和方法。

(1)一维数组

一维数组的定义需要指明数组元素的类型和数组的名称,如定义一个整数数组:

int[ ]  array1;数组需要初始化之后才能使用,数组初始化分为动态初始化和静态初始化。

动态初始化:

使用new对数组进行初始化:数组名=new 数据类型[数组长度]。事实上一般都是把数组的定义和初始化合在一起的,例如:

int[ ] array1;

array1 =new int[3];

array1[0]=2;array1[1]=3;array1[2]=5;

或者在声明数组时,同时进行初始化: int[ ] array1=new int[ ]{ 2,3,5 }

数组中,常用的一个属性是Length,它表示数组的长度。例如:int a=array.Length

静态初始化:

int[ ] array1={ 2,3,5 }

(2)多维数组

定义多维数组是通过方括号中的逗号来划分数组的维数,如定义二维数组:

int[ , ] a = new int[3, 4];

对多维数组进行初始化并同时赋值的写法为:

int[ , ] a=new int[ , ]{ {0, 1, 2, 3 },  { 2, 3, 4, 5 }, { 3, 4, 5, 6 } };

还可以简写为:int[ , ] a={ {0,1, 2, 3 },{ 2, 3, 4, 5 },{ 3, 4, 5, 6 } };

(2)字符串

C#中定义了一个string字符串类,该类也在命名空间System中的,是System.String类的别名。

● 字符串定义

      string LastName;

      LastName="Ming";

      string FirstName = "Zhang";

      string Name=FirstName+"  "+LastName;

      string SameName=Name;

      char[] s2={'计','算','机','科','学'};  //字符数组

      string s3=new string(s2);

● 字符串搜索

      string s="ABC科学";

      int i=s.IndexOf("科");   //i=3

【注意】由于C#中采用Unicde字符集编码,因此每个英文字母和汉字占两个字节,在计算字符串长度时,每个英文字母和汉字的长度都为1。

● 字符串比较函数

      string s1="abc";

      string s2="abc";

      int n=string.Compare(s1,s2);

      n=0表示两个字符串相同,n小于零,sl<s2,n大于零,sl>s2。此方法区分大小写。

● 判断是否为空字符串

      string s="";

      string s1="不空";

      if(s.Length==0) s1="空";

● 得到子字符串或字符

       string s = "取子字符串";

       string sb = s.Substring(2, 3);  //sb="字符串";,从第2个字符开始取3个字符         

● 字符串删除函数

       string s="取子字符串";

       string sb=s.Remove(0,2);  //sb="字符串“

● 字符串替换函数

       string s="计算机科学";

       string s1=s.Replace("计算机","软件");  

● 插入字符串

       string s="计算机科学";

       string s1=s.Insert(3,"软件");

● 把字符串转换为字符数组

       string s="计算机科学";

       char[]s2=s.ToCharArray(0,s.Length);

● 其他数据类型转换为字符串

       int i=9;

       string s1=i.ToString();

       float n=1.9f;

       string s2=n.ToString();

● 大小写转换

       string s="AaBbCc";

       string s1=s.ToLower();

       string s2=s.ToUpper();

● 删除所有的空格

       string s="    bc";

       Console.WriteLine(s.Trim());

       输出: "A  bc";


 

3、类型转换

(1)隐式转换

    隐式转换是系统默认的,在隐式转换过程中,编译器不需要对转换进行详细的检查就能安全地执行转换,例如:

                 int a=8;    //a为整型数据

                 long b=a;  //b为长整型数据

(2)显式转换

    显式转换又叫强制类型转换,即需要用户明确地指定转换类型。 

(int) 3.14   ///把double型的3.14转换成int类型

(3)装箱和拆箱转换

    装箱(boxing)和拆箱(unboxing)是C#系统中重要的概念。它允许将任何类型的数据转换为对象,同时也允许任何对象转换到与之兼容的数据类型。

a、装箱转换

    装箱转换是将值类型的数据隐式地转换成一个对象类型(object)的数据,把一个值类型装箱,就是创建一个object类的实例,并把值类型的变量的值复制给该object。

下面两条语句就执行了装箱转换:

int k=100;       object obj=k;

首先声明整型变量k并赋值,然后再创建一个object 类的对象obj,并将k的值复制给obj。在执行装箱转换时,也可以使用显式转换,如:

int k=100;    object obj= (object)k

b、拆箱转换

    和装箱相反,拆箱转换是指将一个对象类型的数据显式地转换成一个值类型数据。拆箱操作包括分为两步:首先检查对象实例,确保它是给定值类型的一个装箱值,然后把实例的值复制到值类型数据中。例如,下面两条语句就执行了拆箱转换:

object obj=228;   int k=(int)obj;

上述语句执行时,首先会检查obj 对象的值是否为给定值类型的装箱值,由于obj 值为228,值类型为整型,满足拆箱转换的条件,然后将obj 的值复制给整型变量k。

拆箱转换必须要执行显示转换,这是它与装箱转换的不同之处。

float f = 228.56f;

object obj = f;

int k = (int)obj;

以上拆箱过程就不成功。

原创粉丝点击