当前位置: 首页 > news >正文

教育网站制作服务/广点通广告投放平台

教育网站制作服务,广点通广告投放平台,提供武汉手机网站建设,个人做网站好吗经常被问到这样的问题:值类型能不能按引用传递?传递之后又是什么样的处理方式 当然是可以的,不管是现在还是以前都可以。我们来看看下面两个方法的区别static void TestMethod(int a) {a 5;Console.WriteLine(a);}static void TestMedhot2(r…

经常被问到这样的问题:值类型能不能按引用传递?传递之后又是什么样的处理方式

 

当然是可以的,不管是现在还是以前都可以。我们来看看下面两个方法的区别

        static void TestMethod(int a) {a = 5;Console.WriteLine(a);}static void TestMedhot2(ref int a) {a = 5;Console.WriteLine(a);}

image

我们知道int是值类型,在第一个方法中,我们按照默认的方式进行传递,其实就是所谓的按值传递。

image

我们看到在IL_0002这个地方,是把a这个变量压入了栈。也就是说,此时在栈中是有一个a变量代表的值的 ,例如5

 

然后我们再来看另外一个方法。首先从直观上看,int32&和int32肯定是有区别的,我们都知道在C++中,&表示指针的意思

image

然后,我们并没有看到它将a这个变量压入栈中。那么他到底是做了什么事情呢

ldind.* : 间接载入指令,通过指针获取数据。 stind.* : 间接存储指令,通过指针存储数据。

注意,虽然按照引用传递,但这个与“装箱和拆箱”还不是一回事情。什么时候发生装箱拆箱呢?就是将值类型转换为了引用类型(一般指Object).假设我们如下的方法

        static void TestMethod3(object a) {Console.WriteLine(a);}

然后,我们在Main里面去调用

            int a = 7;TestMethod(a);TestMedhot2(ref a);TestMethod3(a);

这里调用TestMethod3的时候会发生装箱

image

image

 

也就是说,如果仅仅是按引用传递参数的话,那么不会发生装箱和拆箱的问题。也就是说,它并没有产生另外一份数据,而是用指针的方式指向了参数所代表的那份数据而已(这份数据可能在栈上面,也可能在堆上面),但总之是一个指针引用,所以说,按照引用传递的情况,我们如果在TestMetho2中修改了a的值,那么后续访问a这个变量,它的值就确实被改变了。

思考一下:为什么说可能在堆上面呢?

下面有一个完整的例子

using System;namespace ConsoleApplication1
{class Program{static void Main(string[] args){int a = 7;Console.WriteLine("原始值:{0}",a);TestMethod(a);Console.WriteLine("按值传递调用后:{0}", a);TestMedhot2(ref a);Console.WriteLine("按引用传递调用后:{0}", a);TestMethod3(a);//这里发生装箱Console.WriteLine("装箱操作传递调用后:{0}", a);Console.WriteLine(a);Console.Read();}static void TestMethod(int a) {a = 5;Console.WriteLine(a);}static void TestMedhot2(ref int a) {a = 5;Console.WriteLine(a);}static void TestMethod3(object a) {int _a = (int)a;//这里发生拆箱Console.WriteLine(_a);}}
}
http://www.jmfq.cn/news/5174623.html

相关文章:

  • 中国第一营销网/seo初学教程
  • 乌鲁木齐网络问政平台/网站优化培训
  • 业务自助下单平台网站/百度seo指南
  • 付网站建设费用 会计科目/台州网站seo
  • 山东泰安区号/快速网站排名优化
  • 如何申请com网站/百度网站排名优化
  • 销售平台网站建设/百度指数关键词搜索趋势
  • 互联网建设企业网站/国内推广平台有哪些
  • 成都网站建设服务/百度云网盘搜索引擎入口
  • 免费网站建设塔山双喜/百度排名
  • 吉林省工程建设标准网站/运营商推广5g技术
  • 广州网站建设出售/百度识图官网
  • 有哪些做鸭子网站/seo推广一年要多少钱
  • 站长工具搜一搜/中国 日本 韩国
  • 网站建设方案项目书/营销活动
  • 网站空间 程序有限制吗/青岛百度seo
  • 网站系统繁忙是什么意思/seo企业站收录
  • 商标设计免费/杭州seo网站推广排名
  • 网站程序盗版/百度推广账号注册流程
  • 东莞网站搜索排名/天津搜狗seo推广
  • 模板ppt免费/武汉seo系统
  • 手机app开发语言/山东服务好的seo公司
  • 建设网站具备的知识/最新国际新闻事件今天
  • 中小企业组网/windows优化大师可靠吗
  • 衡阳网站定制/上海培训机构整顿
  • 做网站的是怎么赚钱/电子商务
  • 专业做医院网站建设/指数
  • 北京最大的网站建设有限公司/长春网站建设公司哪家好
  • 做外单网站亚马逊/优化英文
  • 免费网站建设企业/百度在线客服系统