C# foreach 值类型及引用类型迭代变量改变的方式

C#中foreach不能改变迭代变量的值

然而此种说法只适用与值类型,更改值类型时会改变在栈上的内存分布

引用类型由于是引用地址的变更,不影响内存分布,所以能够在foreach中更改

至于引用类型中的特殊string类型,猜想是因为string类型的变更不是地址的更改,而是会在堆上面重新开辟一块,所以应该也是会影戏到内存分布

原文地址:https://www.cnblogs.com/X-Q-X/p/10402479.html

时间: 2024-11-03 09:41:44

C# foreach 值类型及引用类型迭代变量改变的方式的相关文章

c#学习基础(2)存储、值类型和引用类型、变量

程序运行时,它的数据必须存储在内存中,数据项需要多大的内存.存储在什么地方以及如何存储都依赖该数据项的类型 运行中的程序使用两个区域来存储数据:栈和堆 栈是一个内存数组,是一个LIFO(last in first out后进先出)的数据结构 栈存储几种类型的数据: 某些类型变量的值 程序当前执行环境 传递给方法的参数 栈有以下几大特征 数据只能从栈的顶端插入和删除 把数据放到栈顶端称为入栈push 从栈顶删除数据称为出栈pop 堆是一块内存区域,在队里可以分配大块的内存用于存储某类型的数据. 与

C# 值类型与引用类型的异同

int,bool,decimal等为值类型 List,Stream等为引用类型 用等号设置一个值类型变量等于另一个变量时,会完成复制,之后这两个变量相互之间没有任何影响: 对引用使用等号时,这两个引用就会指向同一个对象 对于值类型和引用类型,变量声明和复制都是一样的. int howMany = 25: bool Scary = true; List<double> temperatures = new List<double>(); int和bool为值类型,List为引用类型,

浅谈PHP变量的值类型和引用类型

看到网友在讨论PHP的&符号,要彻底理解它的用法,就有必要讨论一下变量的两种形式. PHP的变量在内存中是这样存储的,变量保存的并不直接是值的内容,而是地址.例如: $a = 1; 我们看起来,似乎变量$a直接存储了 1 这个值.而实际情况是,PHP解释器创建了变量$a,将值:1 存入内存中的某个地方,再将值的地址存到变量$a中. 需要取值时,先找到变量$a中的地址,再根据地址找到变量的值. 往下看: echo $a; 会输出1,PHP解释器会这样完成这一样代码:找到$a中存储的地址,根据地址找

PHP变量的值类型和引用类型

PHP 变量在内存中保存的并不直接是值的内容而是值的地址.比如: $a = 1; 从表面上看起来似乎是 $a 直接存储了 1 这个值.但是实际情况是,PHP 解释器创建了变量 $a , 将值 1 存入内存中的某个地方,再将值的地址存到变量中. 需要取值时,先找到变量中 $a 的地址,再根据地址找到变量的值. 比如: echo $a; 当我们执行上面这个语句时,会输出 1 ,但是 PHP 解释器会完成这样一段代码:找到 $a 中存储 的地址(即:先取 $a 的地址),根据地址找到存在内存中某个地方

20151024_001_C#基础知识(静态与非静态的区别,值类型和引用类型,堆和栈的区别,字符串的不可变性,命名空间)

1:我们把这些具有相同属性和相同方法的对象进行进一步的封装,抽象出来类这个概念. 类就是个模子,确定了对象应该具有的属性和方法. 对象是根据类创建出来的. 2:类:语法 [public] class 类名 { 字段; 属性; 方法; } 写好了一个类之后,我们需要创建这个类的对象,那么,我们管创建这个类的对象过程称之为类的实例化.使用关键字new 实例化类===创建类 this:表示当前这个类的对象. 类是不占内存的,而对象是占用内存的. 结构是面向过程的,类是面向对象的,之前没有面向对象的时候

值类型和引用类型及参数传递

值类型和引用类型: C#数据类型分为两大类:值类型和引用类型. 值类型数据主要有:结构体struct,枚举体enum,布尔型bool,浮点型,整型. 引用类型数据主要有:数组,字符串,接口,委托,类. 值类型和引用类型的区别: 引用类型继承自System.Object,值类型继承自System.ValueType. 引用类型保存到内存的堆heap中,值类型保存在内存的堆栈stack中.在.net中,栈的内存是自动释放的,而堆会有垃圾回收器GC来释放. 引用类型可以派生出新的类型,而值类型不可以.

C# OOP之五 深入理解值类型和引用类型

内存分配 我们在前面的章节已经了解了值类型和引用类型,下面我们重点讲下值类型和引用类型在内存中的分配情况. 值类型实例通常分配在栈(Stack)上,并且不包含任何指向实例数据的地址,因为变量包含了其实例数据.值类型主要包括简单类型.结构体类型和枚举类型. 例如如下代码:int  iCount=50;  //声明和初始化变量iCount int iSum=iCount; //将iCount中的数据赋值给iSum iCount++;            //增加iCount对iSum无关 在内存中

定义类+类实例化+属性+构造函数+匿名类型var+堆与栈+GC回收机制+值类型与引用类型

为了让编程更加清晰,把程序中的功能进行模块化划分,每个模块提供特定的功能,而且每个模块都是孤立的,这种模块化编程提供了非常大的多样性,大大增加了重用代码的机会. 面向对象编程也叫做OOP编程 简单来说面向对象编程就是结构化编程,对程序中的变量结构划分,让编程更清晰. 类的概念: 类实际上是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法. 类定义了类的每个对象(称为实例)可以包含什么数据和功能. 类中的数据和函数称为类的成员:数据成员        函数成员 数据成员: 数据成员

Java值类型和引用类型

[定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值, 那么调用这个方法是传入的变量的值也将改变.值类型表示复制一个当前变量传给方法, 当你在这个方法中改变这个变量的值时,最初生命的变量的值不会变.通俗说法: 值类型就是现金,要用直接用:引用类型是存折,要用还得先去银行取现.----(摘自网上) [值类型] 也就是基本数据类型 基本数据类型常被称为四类八种 四类: 1,整型 2,浮点型 3,字符型4,逻辑型 八种: 1,整型3种 by