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与值类型参数修饰符的更多相关文章

  1. C#中方法的参数修饰符

    做项目久了,有的时候真的需要静下心来认真的总结一下自己所用到的技术,而不是每天依葫芦画瓢,每天忙忙碌碌,到头来不知道自己忙了个啥,学了什么,自己到底掌握了多少知识.所以我想回顾一下C#的基础知识,把重 ...

  2. Vue修饰符

    为了方便大家写代码,vue.js给大家提供了很多方便的修饰符,比如我们经常用到的取消冒泡,阻止默认事件等等~ 目录 表单修饰符 事件修饰符 鼠标按键修饰符 键值修饰符 v-bind修饰符(实在不知道叫 ...

  3. 事件&vue修饰符

    JavaScript 事件 HTML事件是发生在HTML元素上的事情.当在HTML页面帐使用JavaScript时,javascript可以触发这些事件 HTML 事件 HTML事件可以是浏览器的行为 ...

  4. 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)

    访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...

  5. Java中的(构造方法、方法重载、final修饰符使用及继承和抽象)

    构造方法: 构造方法的名称和类名相同,没有返回类型,参数列表(类型.个数)不同 方法重载:成员方法和构造方法都可以进行重载 方法名相同但是参数列表(类型,个数)不同,成为方法的重载. 继承:直支持单继 ...

  6. C#学习笔记06--类/对象/访问修饰符/方法

    编程思想   1.面向过程   面向过程是要把问题解决的过程分成有一定顺序的不同步骤, 然后按照步骤一步步的将问题解决.   2.面向对象   面向对象解决问题的思路是先分析问题中所涉及的对象, 然后 ...

  7. vue 学习三 v-model 表单绑定输入 以及修饰符的用处

    v-model 指定使用过vue的同学都应该是很熟悉的了,这里就不多介绍,本章主要就是记录一些v-model非常实用的修饰符和对于v-model在html文本框,多行文本框,选择框,单选框,复选框上对 ...

  8. 参数修饰符ref,out ,params的区别

    参数修饰符ref,out ,params的区别 C#中有三个关键字-ref,out ,params,可是这三个之间的区别你都明白了吗? 那么我们就来认识一下参数修饰符ref,out ,params吧, ...

  9. C#之out修饰符、ref修饰符、params修饰符的简单介绍

    一.out修饰符 1.调用一个带有输出参数的方法也需要使用out 修饰符,但是作为输出变量传递的本地变量在将他们作为输出变量传递前不需要赋值(因为调用后会改变或丢失),编译器允           许 ...

随机推荐

  1. C# 类动态添加属性、方法

    问题: 需要动态为WPF中的DataGrid添加列,并动态绑定相应数据.(此处仅实现动态属性的添加和使用,关于动态方法的添加和使用详见推荐阅读) 实现关键点: 目标类继承DynamicObject,添 ...

  2. ACM: SCU 4440 Rectangle - 暴力

     SCU 4440 Rectangle Time Limit:0MS     Memory Limit:0KB     64bit IO Format:%lld & %llu  Practic ...

  3. 基于Spring + Spring MVC + Mybatis + shiro 高性能web构建

    一直想写这篇文章,前段时间 痴迷于JavaScript.NodeJs.AngularJS,做了大量的研究,对前后端交互有了更深层次的认识. 今天抽个时间写这篇文章,我有预感,这将是一篇很详细的文章,详 ...

  4. thinkphp1

    命名空间 含义:从广义上来说,命名空间是一种封装事物的方法. 用途:用来解决命名冲突 namespace xxx\xxx; 使用: use xxx\xx\yy; new\xx\xx\yy; // 单一 ...

  5. Android-简单拨号器案例

    Android [19]简单电话拨号器 @方法步骤 1.新建一个android程序,项目名设置为 phone  ,然后打开  phone->res->layout->activity ...

  6. 第一章-第四题(ACM 比赛的程序是软件么? “写程序” 和 ”做软件“ 有区别么?软件工程是不是教那些不怎么会写程序的人开发软件? 你怎么看?这个游戏团队, 有很好的软件,但是商业模式和其他软件之外的因素呢?有没有考虑到)--By梁旭晖

    引用 http://baike.baidu.com/link?url=z_phkcEO4_HjFG_Lt163dGFAubdb68IbfcfzWscTOrrZ55WbJEQKzyMQ5eMQKyatD ...

  7. 关于java.lang.NoSuchMethodError: android.widget.RelativeLayout.setBackground的解决办法

    今天用一个安卓4.0.4版本的手机测试手上的项目,发现logcat弹出这样一个提示“java.lang.NoSuchMethodError: android.widget.RelativeLayout ...

  8. 小型移动 webApp Demo 知识点整理

    包括内容: css初始化.css全局设置.常用meat标签.rem适配.flex布局.相关技巧(手势库使用.多行截字.1像素边线.点击状态.placeholder居中等) reset 引用 norma ...

  9. tjkd-html

    <div class="result-item"> <div class="kd-item"> <div class=" ...

  10. jiajianhao

    #include<stdio.h> int map[4][4]={ 0,1,0,0, 0,0,0,0, 0,0,0,0, 0,1,0,0}; int flag=0; int minci=9 ...