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

C#中Out和Ref參数修饰符

 

在编程过程中对于函数之间的參数的传递一般分为两种:传值和传地址。

以下为大家分析一下。


传值


比方你又一份文档,假设採用传值的话。相当于我复制了一份,因此我对我这份文档的改动都不会影响到你的那份。假设你对这句话了解的话,那么就简单了。


以下看一个小Demo。


<span style="font-family:SimSun;font-size:18px;"> static void Main(string[] args)
        {
            //定义一个变量
            int val=1 ;
            //调用方法
            Method(val);
            Console.WriteLine(val); //最后输出结果还是1

        }

        static void Method( int i)
        {
            //这是我的那份文档的复制品
            //不管我怎样改动,都影响不到你的
            i = i+ 44;
            Console.WriteLine(i); //我的文档的输出结果是45
        }</span>



传址引用


还是你又一份文档,仅仅只是假设採取传值引用的话。我们两个人共享这份文档,那么可想而知,不管谁操作都会影响到最后的显示


Refkeyword


还是上面的那个Demo,假设换成Refkeyword。效果例如以下


<span style="font-family:SimSun;font-size:18px;">  static void Main(string[] args)
        {
            //定义一个变量
            int val=1 ;
            //调用方法
            Method( ref val);
            Console.WriteLine(val); //最后输出结果是45

        }

        //依照传引用调用
        static void Method(ref int i)
        {
            //俩人共享文档,所以我做的改动
            //都会在最后呈现
            i = i+ 44;
           
        }</span>


Outkeyword


近来再编程过程中又遇到了Outkeyword,与Ref的功能相当,都是传值引用,差别在于Ref在传递之前。须要对文档进行初始化。还是上面的样例,看一下效果


<span style="font-family:SimSun;font-size:18px;">  static void Main(string[] args)
        {
            //定义一个变量
            int val ;//与Ref的差别在于。在此能够不进行初始化
            //调用方法
            Method( out val);
            Console.WriteLine(val); //最后输出结果是44

        }

        //依照传引用调用
        static void Method(out int i)
        {
           
            //i = i+44;//这句话会报错
            i = 44;
           
        }</span>


Ref与Out的差别

     第一:还是两份文档。仅仅只是採取Ref方式的话,你不能给我一份空文档。而Out则能够同意你给我一份空文档。

     第二:採取Ref方式,我能够直接对參数进行+、-等操作,而Out方式则必须先赋值。才干进行对应操作。



 

相关文章:

  • C#的6种常用集合类大比拼
  • duwamish7,petshop 1.5 3.0 这些要好好看看
  • 配置管理工具Puppet 安装和测试(一)
  • D3D中粒子效果实现示例
  • Oracle GoldenGate (ogg) 11.2.1.0.20 是最后一个支持oracle db 10g的 ogg版本号
  • adapter facade 和 proxy
  • 好用的在线web页面测试,移动页面测试工具webpagetest使用图文教程
  • 安装 MariaDB
  • dotText源码阅读(4)--DTO和数据访问
  • Java之JDBC学习
  • 上海:法制宣传上公交 移动电视受好评
  • 基于FPGA的XPT2046触摸控制器设计
  • Tomcat漏洞利用
  • jQuery获取select中全部option值
  • Dubbo之旅--集群容错和负载均衡
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • CentOS7 安装JDK
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Linux各目录及每个目录的详细介绍
  • nfs客户端进程变D,延伸linux的lock
  • oldjun 检测网站的经验
  • PHP CLI应用的调试原理
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • PHP面试之三:MySQL数据库
  • 测试如何在敏捷团队中工作?
  • 对象引论
  • 缓存与缓冲
  • 技术胖1-4季视频复习— (看视频笔记)
  • 京东美团研发面经
  • 模型微调
  • 前端相关框架总和
  • 入门级的git使用指北
  • 设计模式(12)迭代器模式(讲解+应用)
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 思否第一天
  • 我的zsh配置, 2019最新方案
  • 一道闭包题引发的思考
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (09)Hive——CTE 公共表达式
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (分布式缓存)Redis分片集群
  • (六)Hibernate的二级缓存
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (四)c52学习之旅-流水LED灯
  • (转)创业家杂志:UCWEB天使第一步
  • (转)大型网站的系统架构
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .Family_物联网
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查