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 ...
随机推荐
- java学习之导出Excel
1. 输出表格 poi输出excel最基本是输出table表格,下面是输出区域.总销售额(万元).总利润(万元)简单的表格,创建HSSFWorkbook 对象,用于将excel输出到输出流中 HSSF ...
- 查看JVM使用的默认的垃圾收集器
一.查看步骤 cmd执行命令: java -XX:+PrintCommandLineFlags -version 输出如下(举例): 针对上述的-XX:UseParallelGC,这边我们引用< ...
- C语言程序设计--类型转换
变量定义 int var_int = 111111111; char var_char = '2'; double var_double = 3.30; float var_float = 4.80; ...
- Google浏览器清除缓存快捷键
1.CTRL+SHIFT+DEL:直接进入“清除浏览数据”页面,包括清除浏览历史记录.清空缓存.删除Cookie等. 2.chrome浏览器F12中 ctrl+p 可以定位文件
- ssh免密码登录之ssh-keygen的用法
A服务器:192.168.100.2 B服务器:192.168.100.3 要达到的目的:A服务器ssh登录B服务器不需要输入密码 1.在A服务器下使用ssh-keygen命令生成公钥/私钥密钥对,执 ...
- springmvc如何访问到静态的文件,如jpg,js,css
如何你的DispatcherServlet拦截"*.do"这样的有后缀的URL,就不存在访问不到静态资源的问题. 如果你的DispatcherServlet拦截"/&qu ...
- [转][darkbaby]任天堂传——失落的泰坦王朝(上)
前言: 曾经一再的询问自我;是否真的完全了解任天堂这个游戏老铺的真实本质?或许从来就没有人能够了解,世间已经有太多的真相被埋没在谎言和臆测之中.作为 一个十多年游龄的老玩家,亲眼目睹了任天堂从如日 ...
- ceil 和floor
ceil 天花板 floor 地板 ceil向上取整 foor向下取整
- 【转】“菜”鸟理解.NET Framework(CLI,CLS,CTS,CLR,FCL,BCL)
原文地址:http://www.cnblogs.com/eshizhan/archive/2010/01/26/1657041.html 既然要学.NET,就要先认识认识她,我不喜欢大段大段文字的东西 ...
- 双节点weblogic集群安装
一.准备工作 1.环境信息规划 Server name Ip地址 Port 备注 AdminServer 192.168.100.175 7001 管理服务器 Ms1 192.168.100.175 ...