C# 值类型 引用类型 值参数 引用参数 输出参数详解

一、【堆和栈】

介绍值参数和引用参数前,先介绍堆和栈的概念。

堆和栈是指运行程序时,使用的存储数据的两个内存区域。

栈是一个内存数组,遵循LIFO(后进先出)的数据结构,栈一般存储如下数据:

  • 某些类型变量的值;
  • 程序当前的执行环境
  • 传递给方法的参数

栈的示意图如下:

堆也是一块内存区域,它相当于栈很大,一般用于存储大型数据,堆内数据能以任意顺序存入和删除。

堆的示意图如下:

 

二、【值类型和引用类型】

值类型:存储在栈上;

引用类型:类似于C++的指针,引用存储在栈上,实际数据存储在堆上。

需要注意的问题:

1.对于值类型,它也有可能在堆上。如在类中(引用类型)定义了值类型,那么在类实例中,

该值类型数据,还是在堆中,如下图(MyType类中定义了一个值类型A):

2. 值类型都是struct,都继承于System.ValueType类,CLR对System.ValueType的派生类做了特殊处理,如使它内存分配方面具有值类型的特征,使其不能被继承(私有)等。

C#的值类型和引用类型分类如下图:

三、值参数和引用参数

值参数:在方法调用时,在栈上先为形参分配空间,然后将实参的值复制给形参。

引用参数:类似于C++的引用,在方法调用的时候,不会在内存中分配空间,只会为实参分配一个别名。

需要注意的是:

引用参数声明和调用时必须都使用ref

引用参数的实参必须是变量,且用做实参时必须被赋值(防止未被赋值时,报错,相对于C++的改进)

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值