首页 > 代码库 > 一、核心C#(第二部分)

一、核心C#(第二部分)

---恢复内容开始---

预定义数据类型

值类型和引用类型。

1.存储在内存的不同地方:值类型存储在堆栈中,而引用类型存储在托管堆上。注意区分某个类型是值类型还是引用类型,因为这种存储位置的不同会有不同的影响。例如:int 是值类型,这表示下面的语句会在内存的两个地方存储值20:

i = 20;
j = i;

但考虑下面的代码。这段代码假定已经定义了一个类Vector,Vector是一个引用类型,它有一个int类型的成员变量Value:

Vector x, y;
x = new Vector();
x.Value = 30;
y = x;
Console.WriteLine(y.value);
y.Value = 50;
Console.WriteLine(x.Value)

要理解的重要一点是在执行这段代码后,只有一个Vector对戏那个。x和y都指向包含该对象的内存位置。因为x和y是引用类型的变量,声明这两个变量只保留了一个引用---而不会实例化给定类型的对象。两情况下都不会真正的创建对象。要创建对象,就必须使用new关键字,如上所示。因为x和y引用同一对象,所以对x的修改会影响y,反之亦然。因此上面的代码会显示30和50。

 

C#认可的基本预定义类型并没有内置于C#语言中,而是内置于.Net Framework中。例如,在C#中声明一个int类型的数据时,声明的实际上是.Net结构System.Int32的一个实例。这听起来似乎很深奥,但其意义深远:这表示在语法上,可以把所有的基本数据类型看成支持某些方法的类。例如,要把int i 转换为string,可以编写下面的代码:

string s = i.ToString();

应强调的是,这种便利语法的背后,类型实际上任存储仍为基本类型。基本类型在概念上用.Net结构表示,所以肯定没有性能损失。

一些C#类型的名称与C++和Java类型一致,但其定义不同。

在C#中,int类型总是32位带符号的整数,而在C++中,int是带符号的证书,但其位数取决于平台(在Windows上是32位)。

在C#中,所有数据类型都以与平台无关性的方式定义,以备将来C#和.Net迁移到其他平台上。

namespace EnumStudy
{
    class Program
    {
        static void Main(string[] args)
        {
            EnumMyStudy es = new EnumMyStudy();
            es = EnumMyStudy.优秀;

            WriteStudy(es);

            EnumMyStudy es1 = new EnumMyStudy();
            es1 = EnumMyStudy.及格;
            EnumMyStudy es2 = (EnumMyStudy)Enum.Parse(typeof(EnumMyStudy), es1.ToString(), true);
            Console.WriteLine(es2.ToString() + "  " + (int)es2 + "   "+ es2);

            Console.ReadKey();
        }

        static void WriteStudy(EnumMyStudy es)
        {
            switch (es)
            {
                case EnumMyStudy.优秀:
                    {
                        Console.WriteLine("您的学习成绩为:优秀");
                    }break;
                case EnumMyStudy.良好:
                    {
                        Console.WriteLine("您的学习成绩为:良好");
                    }
                    break;
                case EnumMyStudy.及格:
                    {
                        Console.WriteLine("您的学习成绩为:及格");
                    }
                    break;
                case EnumMyStudy.不及格:
                    {
                        Console.WriteLine("您的学习成绩为:不及格");
                    }
                    break;
                case EnumMyStudy.差:
                    {
                        Console.WriteLine("您的学习成绩为:差");
                    } break;
            }
        }
    }
} 

 

 

一、核心C#(第二部分)