2012年6月25日

C#数组-数组的初始化

摘要: 数组和变量一样,在使用时必须对其进行初始化,即给变量或数组赋值。数组可以在定义时初始化,也可以在使用时初始化。下面的代码演示了如何初始化数组。int[] arrayInt={1,2,3,4}也可以用下面方式初始化数组:int[] arrayInt;arrayInt=new int{1,2,3,4}初始化数组还可将前面的方式组合起来,用这种方式初始化数组时,数组的大小必须与元素个数相同。如下所示:int[] arrayInt=new int[4] {1,2,3,4}注意:初始化数组时数组元素必须和数组声明的数据类型相同。 阅读全文

posted @ 2012-06-25 16:44 流星落 阅读(1148) 评论(0) 推荐(0)

C#装箱拆箱

摘要: C#中的数据类型包括值类型、引用类型和指针类型,而指针类型只有在不安全代码中使用。值类型包括简单类型、结构和枚举,引用类型包括类、接口、委托、数组和字符串等。为了保证效率,值类型是在栈中分配内存,在声明时初始化才能使用,不能为NULL,而引用类型在堆中分配内存,初始化时默认为NULL。值类型超出作用范围系统自动释放内存,而引用类型是通过垃圾回收机制进行回收。由于C#中所有的数据类型都是由基类System.Object继承而来的,所以值类型和引用类型的值可以相互转换,而这转换过程也就是所谓的装箱和拆箱。 装箱转换 装箱就是将一个值型变量隐式地转换为引用类型对象,虽然也可以显示转换,但一般都不需要 阅读全文

posted @ 2012-06-25 16:33 流星落 阅读(192) 评论(0) 推荐(0)

详解C#装箱与拆箱

摘要: 装箱(box)就是将值类型转换为引用类型的过程。而相反的过程就叫拆箱(unbox)。一、装箱操作 例如: int val = 100; object obj = val; Console.WriteLine (“对象的值 = {0}", obj); 这是一个装箱的过程,是将值类型转换为引用类型的过程。值类型被装箱时发生了什么?(1)在堆上分配内存。因为值类型最终有一个对象代表,所有堆上分配的内存量必须是值类型的大小加上容纳此对象及其内部结构(比如虚拟方法表)所需的内存量。(2)值类型的值被复制到新近分配的内存中(3)新近分配的对象地址被放到堆栈上,现在它指向一个引用类型。二、拆箱操作 阅读全文

posted @ 2012-06-25 16:32 流星落 阅读(298) 评论(0) 推荐(0)

既然 int是值类型,而 class是引用类型,那么int是怎样从Object派生的呢?

摘要: 是这样的,当int用作int时候,这是一个值类型(在栈上),然而,当它用作是Object时,这是一个引用堆上的整数值的引用类型。换而言之,当你将int看作对象时,运行层将它自动转化为对象引用,这个转化过程称作装箱(boxing)。这个转换包括将栈里的值拷贝到了堆里,并且新建了一个对象的实例来引用该值。拆箱操作(unboxing)是个反过程——将对象转化为基于栈的值类型。int x = 3;// 堆栈上新的int类型,值为3object objx = x;// 堆上新的int, 设定值为3,x=3仍然在堆栈上 int y = (int)objx;//新的int类型的值3在堆栈上,x=3在堆栈上, 阅读全文

posted @ 2012-06-25 16:31 流星落 阅读(380) 评论(0) 推荐(0)

值类型和引用类型的最基本的区别是什么?

摘要: C#将类型分为两类,一类是值类型,另一类是引用类型。大部分固有的基本类型(如整型,浮点型)是值类型,结构类型也是值类型。引用类型包括类、接口、数组和字符串。基本的概念非常简单,那就是一个值类型的实例代表了实际的数据(存在栈中),而一个引用类型的实例代表指向数据的指针或者引用(存在堆中)。在C#中是这样的:int x1 = 3; // x1是堆栈上的值 int x2 = new int(); x2 = 3; // x2还是堆栈上的值! 阅读全文

posted @ 2012-06-25 14:03 流星落 阅读(208) 评论(0) 推荐(0)

C#值类型和引用类型

摘要: 所有的数据在C#中都可以最为两种基本数据类型:值类型和引用类型。什么是值类型呢,值类型数据存储在内存的栈中,可以提供快速访问。如果变量是值类型的,这个变量就包含实际数据,在一个内存区域保存自己的值。如果在代码中修改其值后,在内存中会保存修改的值。C#的整型,字符型,浮点型,布尔型等都属于值类型。结构,枚举也属于值类型。引用类型指向存储在内存堆中的数据的指针和引用。引用类型总是指向一个对象,而且这个对象具有指定的类型,并且在堆上分配了地址。字符串,数组,接口,类,委托都属于引用类型。值类型和引用类型的区别1. 值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对 阅读全文

posted @ 2012-06-25 14:02 流星落 阅读(403) 评论(1) 推荐(0)

运算符的优先级和结合性

摘要: 当表达式中包含多个运算符时,运算符的优先级控制各运算等的计算顺序。如x+y*z,按x+(y*z)计算。当一个操作数出现在两个相同优先级的运算符时,这些运算符的运算顺序取决于其结合性,结合性指运算符在表达式中从左到右或从右到左右的运算顺序。赋值运算符和条件运算符(?:)按右结合原则。除此之外,所有二元运算符都是左结合的,运算按从左到右的顺序执行。在写运算符时,在写表达式的时候,如果无法确定运算符的有效顺序,则尽量采用括号来保证运算顺序。运算符的优先级括号()>自加自减(++,--)>乘、除、取余(*,/,%)>加减(+,-)>小于、小于等于,大于,大于等于(<,<=,>,> 阅读全文

posted @ 2012-06-25 14:01 流星落 阅读(658) 评论(0) 推荐(0)

c#三元运算符

摘要: C#中有一个三元运算符“?:”,语法为:条件表达式?表达式1:表达式2;该操作首先求出条件表达式的值(bool类型),为true时调用表达式1,为flase时调用表达式2。其逻辑为:“如果为真执行第一个,否则执行第二个。”例如:a=3>4?:3:4;输出为4。a=3<4?:3:4;输出为3。using System;class Program{static void Main(){int i1=10,i2=20;int MaxValue=i1>i2?i1:i2;Console.WriteLine("i1={0},i2={1},MaxValue={2}",i 阅读全文

posted @ 2012-06-25 14:00 流星落 阅读(324) 评论(0) 推荐(0)

C#全部简化运算符

摘要: C#全部简化运算符x++, ++x 等价于x = x + 1x--,--x 等价于x = x –1x+= y 等价于 x = x + yx–= y 等价于x = x – yx *= y 等价于x = x * yx /= y 等价于x = x / yx %= y 等价于x = x % yx >>= y 等价于x = x >> yx <<= y 等价于x = x << yx &= y 等价于x = x & yx |= y 等价于x = x | yx ^= y 等价于x = x ^ y 阅读全文

posted @ 2012-06-25 14:00 流星落 阅读(249) 评论(0) 推荐(0)

C#自加和自减运算符

摘要: 如果在赋值语句中,自加运算符在变量的前面,那么变量先加1,然后赋值,称为运算前增量。如果自加运算符在变量的后边,那么先赋值,然后再加1,称为运算后增量。自减运算符表示把变量的值减1,用法与自加运算符相同。using System;class Program{public static void Main(){int a=6;int b=8;Console.WriteLine("a++等于{0}",a++);Console.WriteLine("++a等于{0}",++a);Console.WriteLine("b--等于{0}",b- 阅读全文

posted @ 2012-06-25 13:59 流星落 阅读(783) 评论(0) 推荐(0)

导航