C#基础学习笔记--数据类型,值类型,结构类型,枚举类型
2016-07-13 09:12
696 查看
1.C#语音的数据类型分为三种:值类型、引用类型、指针类型。指针类型进应用于安全代码中。
值类型:值类型变量存储的是数据类型所代表的实际数据,值类型变量的值(或对象)存储在栈(Stack)中,赋值语句是传递变量的值。
引用类型:引用类型(类就是一个引用类型)的实例也叫对象,不存在栈(Stack)中,存储在可管理堆(Managed Heap)中,堆实际上计算机系统中的空闲内存。引用类型变量的值存储在栈(Stack)中,但存储的不是引用类型对象,存储的是引用类型对象的引用,即 地址,它和指针所表示的地址不一样,引用所代表的地址不能被修改,也不能转换成其他类型地址。它是引用型变量,只能引用指定类对象,引用类型变量赋值语句是传递对象的地址。见下例:
using System;
class MyClass//类为引用类型
{ public int a=0;
}
class Test
{ static void Main()
{ f1();
}
static public void f1()
{ int v1=1; //值类型变量v1,其值1 存储在栈(Stack)中
int v2=v1; //将v1 的值(为1)传递给v2,v2=1,v1 值不变。
v2=2; //v2=2,v1 值不变。
MyClass r1=new MyClass(); //引用变量r1 存储MyClass 类对象的地址
MyClass r2=r1; //r1 和r2 都代表是同一个MyClass 类对象
r2.a=2; //和语句r1.a=2 等价
}
}
存储在栈中的变量,当其生命周期结束,自动被撤销,例如,v1 存储在栈中,v1 和函数f1 同生命周期,退出函数f1,v1 不存在了。但在堆中的对象不能自动被撤销。。因此C和C++语言,在堆中建立的对象,不使用时必须用语句释放对象占用的存储空间。.NET 系统CLR 内建垃圾收集器,当对象的引用变量被撤销,表示对象的生命周期结束,垃圾收集器负责收回不被使用的对象占用的存储空间。例如,上例中引用变量r1
及r2 是MyClass类对象的引用,存储在栈中,退出函数f1,r1 和r2 都不存在了,在堆中的MyClass 类对象也就被垃圾收集器撤销。也就是说,CLR 具有自动内存管理功能。
2.C#值类型变量的分类
1.C#语音的数据类型分为三种:值类型、引用类型、指针类型。指针类型进应用于安全代码中。
值类型:值类型变量存储的是数据类型所代表的实际数据,值类型变量的值(或对象)存储在栈(Stack)中,赋值语句是传递变量的值。
引用类型:引用类型(类就是一个引用类型)的实例也叫对象,不存在栈(Stack)中,存储在可管理堆(Managed Heap)中,堆实际上计算机系统中的空闲内存。引用类型变量的值存储在栈(Stack)中,但存储的不是引用类型对象,存储的是引用类型对象的引用,即 地址,它和指针所表示的地址不一样,引用所代表的地址不能被修改,也不能转换成其他类型地址。它是引用型变量,只能引用指定类对象,引用类型变量赋值语句是传递对象的地址。见下例:
using System;
class MyClass//类为引用类型
{ public int a=0;
}
class Test
{ static void Main()
{ f1();
}
static public void f1()
{ int v1=1; //值类型变量v1,其值1 存储在栈(Stack)中
int v2=v1; //将v1 的值(为1)传递给v2,v2=1,v1 值不变。
v2=2; //v2=2,v1 值不变。
MyClass r1=new MyClass(); //引用变量r1 存储MyClass 类对象的地址
MyClass r2=r1; //r1 和r2 都代表是同一个MyClass 类对象
r2.a=2; //和语句r1.a=2 等价
}
}
存储在栈中的变量,当其生命周期结束,自动被撤销,例如,v1 存储在栈中,v1 和函数f1 同生命周期,退出函数f1,v1 不存在了。但在堆中的对象不能自动被撤销。。因此C和C++语言,在堆中建立的对象,不使用时必须用语句释放对象占用的存储空间。.NET 系统CLR 内建垃圾收集器,当对象的引用变量被撤销,表示对象的生命周期结束,垃圾收集器负责收回不被使用的对象占用的存储空间。例如,上例中引用变量r1
及r2 是MyClass类对象的引用,存储在栈中,退出函数f1,r1 和r2 都不存在了,在堆中的MyClass 类对象也就被垃圾收集器撤销。也就是说,CLR 具有自动内存管理功能。
2.C#值类型变量的分类
相关文章推荐
- c#调用COM组件
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现给图片加水印的方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#中的delegate委托类型基本学习教程
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- 举例讲解C#中自动实现的属性
- C#中this的用法集锦
- C#数据结构之顺序表(SeqList)实例详解
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法
- C#实现AddRange为数组添加多个元素的方法
- C#中Equality和Identity浅析
- C#比较二个数组并找出相同或不同元素的方法