C#方法参数传递-同时使用ref和out关键字
在方法参数传递中,可以同时使用ref和out关键字,但是要注意ref和out参数传递的不同。
using System;
class Program
{
static void Main()
{
Program obj = new Program();
int score = 55; //声明原来分数
int refscore, outscore; //声明两个变量
obj.ChangeScore(score, ref refscore, out outscore);
Console.WriteLine("您原来的分数是{0},调整后的分数为{1},加平时表现分后{2}",
score, refscore, outscore);
Console.ReadKey();
}
private void ChangeScore(int score, ref int refscore, out int outscore)
{
if (score > 50 && score < 60)
{
refscore = 60;
}
if (refscore > 60)
{
outscore = refscore + 5;
}
}
}
以上代码编译时会出现两个错误,我们只声明了变量refscore,并没有给变量显示赋值。所以出现第一个错误:使用了未赋值的局部变量“refscore”。out关键字传递参数时,必须被调用方法内修改参数,用if语句判断,只有符合条件的out参数赋值,不符合条件的out参数没有赋值,所以出现了“控制离开方法之前必须对out参数outscore赋值”错误。
using System;
class Program
{
static void Main()
{
Program obj = new Program();
int score = 55; //声明原来分数
int refscore = 0, outscore; //声明两个变量
obj.ChangeScore(score, ref refscore, out outscore);
Console.WriteLine("您原来的分数是{0},调整后的分数为{1},加平时表现分后{2}",
score, refscore, outscore);
Console.ReadKey();
}
private void ChangeScore(int score, ref int refscore, out int outscore)
{
if (score > 50 && score < 60)
{
refscore = 60;
}
if (refscore > 60)
{
outscore = refscore + 5;
}
else
{
outscore = refscore;
}
}
}
以下内容供参考:
一、值参数与引用参数及输出参数的区别:
1、值参数中实参的值不随形参值变更而变更;
形参与实参值互不影响,实参传递给形参时,栈中就为其分配另外一部分空间。这样,两个参数变更时而互不影响。
2、引用参数及输出参数中实参的值会随形参值变更而变更;
(形参:在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元。只有在发生函数调用时,函数中形参才被分配内存单元。在调用结束后,形参所占的内存单元也被释放。调用时将实参的值赋绐形参);
引用参数与输出参数中,实参在栈中分配空间。当实参传递给形参时,会将地址传递给形参,即传送的指针,这样形参变更时,实参也会随著变更。
二、引用参数与输出参数区别:
1、使用ref与out参数时,方法中参数及调用参数都需要加Ref或out关键字。
2、使用ref参数与out参数得到的结果是一样的,区别是:ref在调用前需给调用方法中的参数赋初值。out在调用前不需给调用方法中的参数赋初值,参数在实际方法体中初始化。
C#方法参数传递-同时使用ref和out关键字的更多相关文章
- C#方法中参数ref和out的解析
一.C#方法中参数类型 有4种参数类型,有时候很难记住它们的不同特征,下图对它们做一个总结,使之更容易比较和对照. 二.C#方法中的参数 1.值参数 使用值参数,通过复制实参的值到形参的方式把数据传递 ...
- C# ref与out关键字解析
简介:ref和out是C#开发中经常使用的关键字,所以作为一个.NET开发,必须知道如何使用这两个关键字. 1.相同点 ref和out都是按地址传递,使用后都将改变原来参数的数值. 2.ref关键字 ...
- 关于c#中”ref”和”out”关键字的一些理解
一. 综述(本文内容大部分来自网络,经本人整理而成,仅供学习参考,不免理解错误,欢迎批评指正) 在c#中,方法的参数传递有四种类型: (1) 传值参数(by value) 传值参数无需额外的修饰符.传 ...
- C#中ref和out关键字的应用以及区别
首先:两者都是按地址传递的,使用后都将改变原来参数的数值. 其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所 ...
- 为什么C#中ref和out 关键字 ?
需求假设:现需要通过一个叫Swap的方法交换a,b两个变量的值.交换前a=1,b=2,断言:交换后a=2,b=1. 现编码如下: class Program { static void ...
- c#中ref和out 关键字
问题:为什么c#中要有ref和out?(而java中没有)需求假设:现需要通过一个叫Swap的方法交换a,b两个变量的值.交换前a=1,b=2,断言:交换后a=2,b=1. 现编码如下: class ...
- 索引器和ref、out关键字
这节讲三个小知识:索引器.ref.out. 索引器: 在一个类中,我们可以定义一个索引器,它可以让我们在外部像访问数组元素一样访问类的属性成员. 索引器的定义就像定义属性一样,只不过名称为this,后 ...
- String作为方法参数传递 与 引用传递
String作为方法参数传递 String 和 StringBuffer的区别见这里: http://wenku.baidu.com/view/bb670f2abd64783e09122bcd.htm ...
- Java-Runoob-高级教程-实例-方法:09. Java 实例 – continue 关键字用法-un
ylbtech-Java-Runoob-高级教程-实例-方法:09. Java 实例 – continue 关键字用法 1.返回顶部 1. Java 实例 - continue 关键字用法 Java ...
随机推荐
- Android 基于 Speex 的高度封装语音库,0 耦合,没三方jar包
作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...
- C# List<T> 泛型
1.简介 所属命名空间:System.Collections.Generic List<T>类是 ArrayList 类的泛型等效类.该类使用大小可按需动态增加的数组实现 IList< ...
- Java内存泄露监控工具:JVM监控工具介绍【转】
jstack?-- 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程 ...
- MYSQL中GROUP BY不包含所有的非聚合字段时的注意事项
本文导读:在MYSQL中使用GROUP BY分组时,我们可以select 多个非聚合字段,但是这些字段不在GROUP BY中,这样的SQL查询在SQL SERVER.ORACLE中是不合理的,且会报错 ...
- Flask 学习篇一: 搭建Python虚拟环境,安装flask,并设计RESTful API。
前些日子,老师给我看了这本书,于是便开始了Flask的学习 GitHub上的大神,于是我也在GitHub上建了一个Flask的项目. 有兴趣可以看看: https://github.com/Silen ...
- VMware esxi 5.5装机方案
1.测试环境下,VMware esxi 5.5环境基本配置如下(主机环境以实际为准): 2.裸机安装VMware esxi 5.5步骤: 1)将ESXi安装程序CD/DVD 插入 CD/DVD-ROM ...
- 通过微信服务号推送Zabbix告警
近期看到一篇通过微信实现Zabbix告警的文章,但实践时发现,无法成功发送消息. 分析原因,应该是微信公众平台加强了登录验证,在登录时会需要管理员进行扫描二维码操作才能成功登陆后台: 而之前文章中的A ...
- 不移除通知的话,出现的bug
没销毁的私聊控制器仍然监听到了通知,发送表情
- LightOj 1118 - Incredible Molecules(两圆的交集面积)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1118 给你两个圆的半径和圆心,求交集的面积: 就是简单数学题,但是要注意acos得到的 ...
- 非常可乐---hdu 1495(BFS)
http://acm.hdu.edu.cn/showproblem.php?pid=1495 题意: 有3个杯子a b c:a=b+c:然后刚开始时只有a是满的,其它为空的,然后a b c三个之间互相 ...