C# ref、out、params与值类型参数修饰符
1.值类型:
static void Main(string[] args)
{
int a = ;
int b = ;
NumVal(a, b);
Console.WriteLine("a={0},b={1}", a, b); //输出结果为:a=5,b=3 Console.ReadKey();
} static void NumVal(int a, int b)
{
a = a + b;
b = a - b;
}
代码
值类型被当做参数时,传递的是值的副本,所以在下面的方法中修改参数的值并不能影响函数调用中指定的参数的值。
当然也可以为函数定义返回值从而得到一些想要的结果:
static void Main(string[] args)
{
int a = ;
int b = ;
int num1 = NumVal(a, b);
int num2 = NumValC(a, b);
Console.WriteLine("a={0},b={1}", num1, num2); //输出结果为:a=8,b=2 Console.ReadKey();
} static int NumVal(int a, int b)
{
a = a + b;
return a;
} static int NumValC(int a, int b)
{
b = a - b;
return b;
}
代码
但是这样做不好的地方就是不能改变用作参数的多个变量值。(因为函数只有一个返回值)。
2.引用类型(ref):
static void Main(string[] args)
{
int a = ;
int b = ;
NumVal(ref a, ref b);
Console.WriteLine("a={0},b={1}", a, b); //输出结果为:a=8,b=2 Console.ReadKey();
} static void NumVal(ref int a, ref int b)
{
int c = a; // c=5
a = a + b; // a=5+3
b = c - b; // b=5-3
}
代码
此时可以通过“引用”参数修饰符(即关键字 ref)传递参数,这样函数处理与函数调用中使用的变量就是同一个(因为引用类型参数传递的是引用的地址),所以在方法中对这个变量进行任何修改都会影响用作参数的变量的值。
但经过 ref 修饰符修饰的变量在用作函数的参数传递时必须先初始化,不能在函数中进行初始化操作。
3.输出类型(out):
static void Main(string[] args)
{
int a;
int b;
NumVal(out a, out b);
Console.WriteLine("a={0},b={1}", a, b); //输出结果为:a=15,b=4 Console.ReadKey();
} static void NumVal(out int a, out int b)
{
a = ;b = ; // 初始化输出参数 int c = a;
a = a * b;
b = (c + b) / ;
}
代码
out 关键字的使用方式和 ref 关键字类似,使参数按引用传递值。
不同之处:ref 参数在用作参数传递时必须先初始化。out 参数则不需要在传递之前初始化(就算在传递之前已经初始化,在函数里面也需要重新初始化,忽略传递之前初始化的值),但必须在方法结束返回之前赋值。
4.参数数组(params):
static void Main(string[] args)
{
int i = ;
int[] arr = new int[] { , , , , }; //可以先定义一个数组对象 SumVals(ref i, arr); //然后把这个数组对象作为参数传递 Console.WriteLine("总共有{0}个元素!", i); //输出结果为:总共有5个元素! SumVals(ref i, , , , , ); //也可以直接调用 Console.ReadKey();
} static void SumVals(ref int i,params int[] vals)
{
for (i = ; i < vals.Length; i++)
{
Console.WriteLine("第{0}个元素为:{1}", i + , vals[i]);
}
}
代码
C#中函数可以指定一个特定的参数(即 params 修饰的参数数组,只能有一个),且这个参数必须是函数定义中的最后一个参数(即 params 关键字后面不允许出现任何其他参数)。
params 修饰的参数数组不指定参数的数量,唯一的限制就是所有的参数类型必须和参数数组是同类型。
C# ref、out、params与值类型参数修饰符的更多相关文章
- C#中方法的参数修饰符
做项目久了,有的时候真的需要静下心来认真的总结一下自己所用到的技术,而不是每天依葫芦画瓢,每天忙忙碌碌,到头来不知道自己忙了个啥,学了什么,自己到底掌握了多少知识.所以我想回顾一下C#的基础知识,把重 ...
- Vue修饰符
为了方便大家写代码,vue.js给大家提供了很多方便的修饰符,比如我们经常用到的取消冒泡,阻止默认事件等等~ 目录 表单修饰符 事件修饰符 鼠标按键修饰符 键值修饰符 v-bind修饰符(实在不知道叫 ...
- 事件&vue修饰符
JavaScript 事件 HTML事件是发生在HTML元素上的事情.当在HTML页面帐使用JavaScript时,javascript可以触发这些事件 HTML 事件 HTML事件可以是浏览器的行为 ...
- 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)
访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...
- Java中的(构造方法、方法重载、final修饰符使用及继承和抽象)
构造方法: 构造方法的名称和类名相同,没有返回类型,参数列表(类型.个数)不同 方法重载:成员方法和构造方法都可以进行重载 方法名相同但是参数列表(类型,个数)不同,成为方法的重载. 继承:直支持单继 ...
- C#学习笔记06--类/对象/访问修饰符/方法
编程思想 1.面向过程 面向过程是要把问题解决的过程分成有一定顺序的不同步骤, 然后按照步骤一步步的将问题解决. 2.面向对象 面向对象解决问题的思路是先分析问题中所涉及的对象, 然后 ...
- vue 学习三 v-model 表单绑定输入 以及修饰符的用处
v-model 指定使用过vue的同学都应该是很熟悉的了,这里就不多介绍,本章主要就是记录一些v-model非常实用的修饰符和对于v-model在html文本框,多行文本框,选择框,单选框,复选框上对 ...
- 参数修饰符ref,out ,params的区别
参数修饰符ref,out ,params的区别 C#中有三个关键字-ref,out ,params,可是这三个之间的区别你都明白了吗? 那么我们就来认识一下参数修饰符ref,out ,params吧, ...
- C#之out修饰符、ref修饰符、params修饰符的简单介绍
一.out修饰符 1.调用一个带有输出参数的方法也需要使用out 修饰符,但是作为输出变量传递的本地变量在将他们作为输出变量传递前不需要赋值(因为调用后会改变或丢失),编译器允 许 ...
随机推荐
- 我的jQuery源码读后感
(function(window, undefined) { // 构造jQuery对象 var jQuery = (function() { var jQuery = function(select ...
- JS:事件处理程序
在JQuery中有个toggle事件,可以绑定两个或多个函数,可以轮流相应click事件,这两天学习到原来javascript中有两个方法(也可以说是四个)同样可以实现这个功能. #box{ marg ...
- ZeroMQ接口函数之 :zmq_plain - 明文认证
ZeroMQ 官方地址 :http://api.zeromq.org/4-2:zmq_plain zmq_plain(7) ØMQ Manual - ØMQ/4.1.0 Name zmq_plain ...
- STL三种标准容器
顺序性容器 vector:从后面快速的插入与删除,直接访问任何元素 deque:从前面或后面快速的插入与删除,直接访问任何元素 list: 双链表,从任何地方快速的插入与删除 关联容器 set:快速查 ...
- ps 文字处理篇
ps文字处理篇 1.对文字镂空处理并且移除到新图像上: 首先创建图层-文字编辑-横排编辑 其次 魔棒工具选择通过颜色来选择选区 右击图层-栅格化图层 删除键将选择的颜色删除留下选区- 复制粘贴到另一个 ...
- ASM FailGroup验证
ASM-FailGroup验证 一.FailGroup有效性验证 创建DiskGroup,在Redundancy选项 High:至少3块disk,至少3个failgroup,每一个extent存在1主 ...
- localstorage 的属性改变问题
localstorage 得到的是对象,我们打算改对象的某个属性的值,方法是 通过临时变量对象得到,改变临时变量,然后把临时变量给localstorage的方法 var localS = windo ...
- Sublime Text 使用笔记
常用快捷键 command+shift+d # 复制当前行到下一行 .
- 一起来做webgame,《卡片魔兽》(一)基础战斗
写在前面的话 这不是教程,只是博主在娱乐过程中的一些小结记录.博主水平有限,没有什么高级的东西,只是将一些小的知识点结合一下,做这么一个养成类型的卡片页面游戏(=.=!有点绕).做一个完整的游戏,涉及 ...
- 展望 2017年商业智能BI 发展的趋势
在展望2017年商业智能 BI 发展趋势前,我们先来了解一下商业智能 BI 发展的几个重要阶段. 传统 BI 和新型 BI 的分水岭(2013年) 大背景 在2013年以前相当长的一个周期(2005年 ...