欢迎来到天天文库
浏览记录
ID:52471957
大小:697.05 KB
页数:87页
时间:2020-04-08
《C#第2章数据类型与流程控制.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第2章数据类型与流程控制2.1数据类型2.2不同数据类型之间的转换2.3常量与变量2.4运算符与表达式2.5控制台应用程序与格式化输出2.6C#流程控制语句2.1数据类型C#数据类型分为两类:值类型和引用类型。P17值类型:包括简单类型、枚举类型、结构类型、可空类型。引用类型:包括类、接口、数组、委托。一般把引用类型的变量称为对象。值类型与引用类型栈和堆内存基本上被划分为栈和堆栈是用来存储值类型变量的数据结构,如创建int变量时,该变量的值存储在栈上,此外对函数(方法)的任何调用都添加到栈的顶端,在函数返回时删除该调用。堆
2、用于存储引用类型的变量,在创建类的实例时在堆上分配对象,返回该对象的地址,并且将该地址存储在位于栈上的变量中。值类型:C#的所有值类型均隐式派生自SYSTEM.VALUETYPE:1、结构体:Struct(直接派生于SYSTEM.VALUETYPE);2、数值类型:整型:SBYTE,SHORT,INT,LONG,BYTE,USHORT,UINT,ULONG,CHAR;浮点型:FLOAT,DOUBLE;用于财务计算的高精度DECIMAL型;3、BOOL型:BOOL(SYSTEM.BOOLEAN的别名);4、用户定义的结构体(
3、派生于SYSTEM.VALUETYPE)。5、枚举:ENUM(派生于SYSTEM.ENUM);6、可空类型(派生于SYSTEM.NULLABLE泛型结构体,T?实际上是SYSTEM.NULLABLE的别名)。值类型与引用类型区别值类型:C#中的所有值类型变量在声明时都有初始值,然而没有明确地初始化变量,C#就禁止使用该变量。如:boolmarried;Console.WriteLine(married);则提示错误信息“使未赋值的变量married”C#中可以将值类型声明为可空(nullable),意味着它可以
4、暂时没有值。如:bool?married=null;或者Nullablemarried=null;值类型与引用类型区别引用类型:1、数组(派生于SYSTEM.ARRAY)2、用户用定义的以下类型:类:class(派生于SYSTEM.OBJECT);接口:interface(接口不存在派生于何处的问题。3、委托:delegate(派生于SYSTEM.DELEGATE)。4、Object(System.OBJECT的别名);5、字符串:string(System.String的别名)。值类型与引用类型区别值类型与引
5、用类型区别堆栈堆56ij实际数据12345Hobj图中i和j为值类型变量,obj为引用类型变量值类型的变量保存的是变量的值;引用类型的变量保存的是数据的引用地址。引用类型分两步创建:首先在堆栈上创建一个引用变量,然后在堆上创建对象本身,再把这个内存的句柄(也是内存的首地址)赋给引用变量例如:strings1,s2;s1="ABCD";s2=s1;其中,s1,s2是指向字符串的引用变量,s1的值是字符串“ABCD”存放在内存的地址,这就是对字符串的引用,两个引用型变量之间的赋值,使得s2、s1都是对“ABCD”的引用。如下图
6、所示。值类型与引用类型区别(1)考虑如下代码:inti=5;intj=6;intk=i;i=7;问k的值是多少?(2)假设类A有实例Obj,Obj1,执行如下代码Obj.age=10;Obj1=Obj;Obj1.age=12;问此时Obj.age的值是多少?值类型与引用类型区别值类型和引用类型的区别特性值类型引用类型变量中保存的内容实际数据指向实际数据的引用指针内存空间配置堆栈(Stack)受管制的堆(ManagedHeap)内存需求较少较多执行效率较快较慢内存释放时间点执行超过定义变量的作用域时由垃圾回收机制负责回收为什
7、么要托管堆(受管制的堆)?.NET框架包含一个托管堆,所有的.NET语言在分配引用类型对象时都要使用它。像值类型这样的轻量级对象始终分配在栈中,但是所有的类实例和数组都被生成在一个内存池中,这个内存池就是托管堆。垃圾收集器的基本算法很简单:●将所有的托管内存标记为垃圾●寻找正被使用的内存块,并将他们标记为有效●释放所有没有被使用的内存块●整理堆以减少碎片相关面试题目intk=5;intj=5;if(Object.ReferenceEquals(k,j))//判定k和j是否为同一个实例Console.WriteLine("E
8、qual");elseConsole.WriteLine("NotEqual");Objecto=newobject();Objectobj=o;if(Object.ReferenceEquals(o,obj))Console.WriteLine("Equal");elseConsole.WriteLi
此文档下载收益归作者所有