博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# out ref
阅读量:5013 次
发布时间:2019-06-12

本文共 1632 字,大约阅读时间需要 5 分钟。

out 关键字通过引用传递参数。

1、使用 out 参数,方法定义和调用方法均必须显式使用 out 关键字。

2、out 参数传递的变量在方法调用中传递之前不必进行初始化。 但是,被调用的方法需要在返回之前赋一个值。

在 C# 6 及更早版本中,必须先在单独的语句中声明变量,然后才能将其作为 out 参数传递。 下面的示例先声明了变量 number,然后再将它传递给将字符串转换为数字的 Int32.TryParse 方法。

static void Main(string[] args)        {   int  a;            string y = "999kk";            bool  B = MyintParse(y,out  a);        }public static bool MyintParse(string s,out int r)        {            r = 0;//out 先赋值后使用            try            {                r = int.Parse(s);                return true;            }            catch (Exception)            {                return false;                throw;            }        }

 

从 C# 7.0 开始,可以在方法调用的参数列表而不是单独的变量声明中声明 out 变量。 这使得代码更简洁可读,还能防止在方法调用之前无意中向该变量赋值。 下面的示例与上一个示例基本相同,不同之处在于它在对 方法的调用中定义了 number 变量。

string numberAsString = "1640";int number;if (Int32.TryParse(numberAsString, out number))    Console.WriteLine($"Converted '{numberAsString}' to {number}");else    Console.WriteLine($"Unable to convert '{numberAsString}'");// The example displays the following output://       Converted '1640' to 1640

 

在方法签名和方法调用中,按引用将参数传递给方法。

在方法签名中,按引用将值返回给调用方。

在成员正文中,指示引用返回值是否作为调用方欲修改的引用被存储在本地,或在一般情况下,局部变量按引用访问另一个值。

struct 声明中声明 ref structref readonly struct

1、若要使用 ref 参数,方法定义和调用方法均必须显式使用 ref 关键字

2、传递到 refin 形参的实参必须先经过初始化,然后才能传递。 这与 形参不同,在传递之前,不需要显式初始化该形参的实参。

ref作为参数的函数在调用前,实参必须赋初始值。否则编译器将提示:使用了未赋值的局部变量;

out作为参数的函数在调用前,实参可以不赋初始值。(C# 7.0 开始)

有out|ref关键字的方法可以与无out和ref关键字的方法构成重载;但如想在out和ref间重载,编译器将提示:不能定义仅在ref和out的上的方法重载

out用于传出值,ref可以理解为双向的,即可传入,亦可传出。

如果有out或ref修饰的话,那么改变方法中的参数变量的值,调用者方法中变量的值也会相应额改变。

转载于:https://www.cnblogs.com/zeng-qh/p/10303470.html

你可能感兴趣的文章
JS基础回顾,小练习(判断数组,以及函数)
查看>>
多任务——进程
查看>>
WCF:如何将net.tcp协议寄宿到IIS
查看>>
WebAPI HelpPage支持area
查看>>
Path元素
查看>>
php_soap扩展应用
查看>>
第二百三十一节,Bootstrap 介绍
查看>>
vi/vim 三种模式的操作
查看>>
JAVA面向对象三大特性总结
查看>>
guid
查看>>
Python中出现“TabError: inconsistent use of tabs and spaces in indentation”问题的解决
查看>>
ajax请求
查看>>
js学习总结----DOM增删改和应用
查看>>
希尔伯特矩阵(Hilbert matrix)
查看>>
(20)sopel算法
查看>>
学习总结 javascript 闭包
查看>>
实验吧一个小坑注入
查看>>
【 D3.js 高级系列 — 8.0 】 打标
查看>>
Mac必备软件推荐
查看>>
Android Gson深入分析
查看>>