C#中数据类型

来源:互联网 发布:阿国网络随笔博客 编辑:程序博客网 时间:2024/05/17 18:19

     C#中的变量类型根据其定义可以分为两种:一种是值类型,另一种是引用类型。这两种变量类型的区别在于数据的存储方式,值类型的变量本身直接储存数据,而引用类型则储存实际数据的引用,程序通过此引用找到找到真正的数据。

     一,值类型

    值类型直接储存其数据值,主要包括整型、浮点型以及布尔型等。由于值类型变量储存在栈中, 因此效率很高。

    值类型有以下几个比较重要的特点:

(1),对于一个值类型的操作不会影响其他的变量。

(2),复制值变量时,复制的是变量的值,而不是变量的地址。

(3),值类型变量的值不能为NULL,必须具有一个确定的值。

     对于C#中的整型,浮点型变量同C和C++。

     二,引用类型

     引用类型变量是构建C#应用程序的主要对象类型数据。在应用程序执行过程中,预先定义的对象类型以new创建对象实例,并且储存在堆里。堆是一种由系统弹性分配的内存空间,没有特定的大小以及存活时间,因此可以被弹性地运用于对象的访问。

     引用类型具有以下几个比较重要的特征:

(1),必须在托管堆中为引用类型变量分配内存。

(2),使用new关键字来创建应用类型变量。

(3),多个引用类型变量可以引用同一对象,这种情况下,对一个变量的操作会影响另一个变量所引用的同一对象。

(4),引用类型被赋值前的值都是NULL型

     三, 值类型和引用类型的区别(针对值类型的特点一和引用类型的特点三)

主要以两个实例来说明区别。

事例一,上代码:

namespace _3._11{    class Program    {        class C                                    //创建一个公共类型的类C        {            public int Value = 0;                  //声明一个公共int 类型的变量 Value        }        static void Main(string[] args)        {            int v1 = 0;                   //这是一个值类型变量
            int v2 = v1;                  //将v1的值赋给v2            v2 = 927;            C r1 = new C();             //使用new关键字创建引用对象            C r2 = r1;       //引用类型变量,相当于r1 和 r2 是同一个地址 , 当其中一个值改变时,另一个只也随之改变            r2.Value = 112;            Console.WriteLine("Value :{0},{1}", v1, v2);            Console.WriteLine("Refs:{0} , {1}", r1.Value, r2.Value);            Console.ReadLine();        }    }}

我们可以看到v2的值改变了,但是v1的值并没有发生变化;而r2的值发生变化后,r1的值也随之发生变化。这就是值类型变量和引用类型变量的区别。

       我们可以通过事例二更清楚看到这种区别。来人, 给客官上代码~

       事例二:

namespace 演示{    class Program    {        static void Main(string[] args)        {            ReferenceAndValue.Demonstration();            Console.ReadLine();        }    }    public class stamp    {        public string Name { get; set; }        public int Age { get; set;}    }    public static class ReferenceAndValue    {        public static void Demonstration()        {            stamp Stamp_1 = new stamp { Name = "Premiere", Age = 25 };            stamp Stamp_2 = new stamp { Name = "Again", Age = 17 };            int age = Stamp_1.Age;            Stamp_1.Age = 22;            stamp guru = Stamp_2;            Stamp_2.Name = "Again Amend";            Console.WriteLine("Stamp_1's name : {0}", Stamp_1.Age);            Console.WriteLine("age's value : {0}", age);            Console.WriteLine("Stamp_2's name:{0}", Stamp_2.Name);            Console.WriteLine("guru's name:{0} ", guru.Name);        }    }}


来,我们看一下结果就清楚了。