值类型
C#中值类型的变量主要包括整数类型、浮点类型、decimal和bool类型等。值类型的变量都在堆栈中进行分配,因此效率很高。所以使用值类型的主要目的是为了提高性能。
- 整数类型
整数类型代表的就是一个整数。当用户声明一个int类型时,系统就会分配内存来存储值。 - 浮点类型
浮点类型的变量主要是对带有小数点的数据进行处理。 - decimal类型
decimal关键字指示128位数据类型。与其他浮点型相比,decimal类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。 - bool类型
众所周知,计算机实际上就是用二进制来表示各种数据的,即不管何种数据,在计算机内部都是采用二进制方式处理和存储的。布尔类型表示的逻辑变量只有两种取值:“真”和“假”。在C#中,分别采用true和false两个值来表示。 - 字符类型
字符包括数字字符、英文字母、表达符号等,C#提供的字符类型按照国际上公认的标准,采用Unicode字符集。一个Unicode的标准字符长度为16位。
引用类型
C#的另一大数据类型是引用类型。“引用”这个词在这里的含义是,该类型的变量不直接存储包含的值,而是指向它所要存储的值。也就是说,引用类型存储实际数据的引用值的地址。
using System;
namespace Project9
{
class Program
{
class A //创建一个类A
{
public int num = 0; //声明一个公有int类型的变量num
}
static void Main()
{
int a = 0; //定义int类型的变量a,并初始化为0
int b = a; //定义int类型的变量b,将a赋给b
b = 100; //为变量b重新赋值为100
Console.WriteLine("a={0} b={1}", a, b);
A n1 = new A(); //使用new关键字创建引用对象
A n2 = n1; //是n1等于n2
n2.num = 200; //为变量n2的num重新赋值
Console.WriteLine("n1={0} n2={1}", n1.num, n2.num);
Console.ReadKey();
}
}
}
【程序分析】本例演示了引用类型变量的输出。由于引用类型的变量存储是对其数据(对象)的引用,而值类型的变量直接包含其数据,对于引用类型,两种变量可引用同一对象,因此,对一个变量执行的操作会影响另一个变量所引用的对象;对于值类型,每个变量都具有其自己的数据副本,对一个变量执行的操作不会影响另一个变量。所以,变量a的值没有受到变量b的影响,最后输出a与b的值不相同。
a=0 b=100
n1=200 n2=200
值类型与引用类型的区别
C#里面把数据类型分为两大类,分别为值类型和引用类型,值类型包括基本数据类型(int、char、double等),结构和枚举。引用类型包括接口、数组、类等。下面列出了这两大类的区别呢。
- 值类型
值类型就是一个包含实际数据的量。即当定义一个值类型的变量时,C#会根据它所声明的类型,以栈方式分配一块大小相适应的存储区域给这个变量,随后对这个变量的读或写操作就直接在这块内存区域进行。 - 引用类型
一个引用类型的变量不存储它们所代表的实际数据,而是存储实际数据的引用。引用类型分两步创建,首先在栈上创建一个引用变量,然后在堆上创建对象本身,再把这个内存的句柄(也是内存的首地址)赋给引用变量。
枚举类型
枚举类型也称为枚举,用于定义一组在逻辑上密不可分的整数值提供便于记忆的符号。枚举类型是使用enum关键字声明。
using System;
namespace Project10
{
class Program
{
enum Days { Sun, Mon, tue, Wed, thu, Fri, Sat }; //使用enum创建枚举
static void Main(string[] args)
{
int start = Convert.ToInt32(Days.Mon); //将枚举值Mon赋给变量start
int end = (int)Days.Fri; //将枚举值Fri赋给变量end
Console.WriteLine("Monday: {0}", start);
Console.WriteLine("Friday: {0}", end);
Console.ReadKey();
}
}
}
【程序分析】本例演示了枚举类型变量的输出。在代码中首先创建一个Days枚举,该枚举有7个值,分别表示周一到周日;然后通过逗号运算符访问Days枚举的Mon和Fri,并将这两个枚举值分别赋给变量start和end;最后输出变量start和end。
Monday: 1
Friday: 5
变量的作用域
变量的作用域指的是能够使用该变量的区域。作用域既作用于方法,也作用于变量。一个标识符的作用域是从声明该标识符的那个位置开始的,不管是变量还是方法都应如此。在C#中通常用“{”和“}”来界定变量的作用范围。
变量的作用域有着严格的要求,在声明变量时需要注意两点,首先变量名不要重复,其次声明变量的位置很重要。例如:
static void Main(string[] args)
{
for (int i = 0; i < 5; i++)
{
int s = 100;
Console.WriteLine(s);
}
}
这是一个for循环语句,该语句的作用是循环输出5次变量s的值,而变量s在for循环外则并不能访问到。因为变量s在for循环内部声明,所以只能在for循环内部访问。