http://www.jb51.net/article/37967.htm

最近在写程序时遇到params,ref,out 参数问题。回头有自习看了看MSDN,才巩固了基础。现在和大家分享一下。
params
params 关键字在方法成员的参数列表中使用,为该方法提供了参数个数可变的能力,它在只能出现一次并且不能在其后再有参数定义(之前可以)。
示例:

复制代码代码如下:

using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class App
{
//第一个参数必须是整型,但后面的参数个数是可变的。
//而且由于定的是object数组,所有的数据类型都可以做为参数传入
public static void UseParams(int id, params object[] list)
{
Console.WriteLine(id);
for (int i = 0; i < list.Length; i++)
{
Console.WriteLine(list[i]);
}
}
static void Main()
{
//可变参数部分传入了三个参数,都是字符串类型
UseParams(1, "a", "b", "c");
//可变参数部分传入了四个参数,分别为字符串、整数、浮点数和双精度浮点数数组
UseParams(2, "d", 100, 33.33, new double[] {1.1, 2.2});
Console.ReadLine();
}
}
}

ref
ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
1.若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。
2.传递到 ref 参数的参数必须最先初始化。这与 out 不同,out 的参数在传递之前不需要显式初始化。
3.属性不是变量,因此不能作为 ref 参数传递。
4.尽管 ref 和 out 在运行时的处理方式不同,但它们在编译时的处理方式是相同的。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法。例如,从编译的角度来看,以下代码中的两个方法是完全相同的。如果尝试这么做,将导致不能编译该代码。
5.如果一个方法采用 ref 或 out 参数,而另一个方法不采用这两类参数,则可以进行重载。
示例:
按引用传递值类型是有用的,但是 ref 对于传递引用类型也是很有用的。这允许被调用的方法修改该引用所引用的对象,因为引用本身是按引用来传递的。

复制代码代码如下:

using System;
class App
{
    public static void UseRef(ref int i)
    {
        i += 100;
        Console.WriteLine("i = {0}", i);
    }
    static void Main()
    {
        int i = 10;
        // 查看调用方法之前的值
        Console.WriteLine("Before the method calling: i = {0}", i);
        UseRef(ref i);
        // 查看调用方法之后的值
        Console.WriteLine("After the method calling: i = {0}", i);
        Console.Read();
     }
}

out
out 关键字会导致参数通过引用来传递。这与 ref 关键字类似。
与 ref 的不同之处:
1.ref 要求变量必须在传递之前进行初始化。
2.尽管作为 out 参数传递的变量不需要在传递之前进行初始化,但需要调用方法以便在方法返回之前赋值。
示例:
与 ref 示例不同的地方只要将 ref 改为 out,然后变量 i 仅需要声明即可。

复制代码代码如下:

static void Main()
{
    //int i = 10; 改为
    int i;
}

基于params,ref,out的参数问题详解的更多相关文章

  1. 基于双向BiLstm神经网络的中文分词详解及源码

    基于双向BiLstm神经网络的中文分词详解及源码 基于双向BiLstm神经网络的中文分词详解及源码 1 标注序列 2 训练网络 3 Viterbi算法求解最优路径 4 keras代码讲解 最后 源代码 ...

  2. MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解

    MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Mycat介绍 1>.什么是Mycat Mycat背后是 ...

  3. spring基于通用Dao的多数据源配置详解【ds1】

    spring基于通用Dao的多数据源配置详解 有时候在一个项目中会连接多个数据库,需要在spring中配置多个数据源,最近就遇到了这个问题,由于我的项目之前是基于通用Dao的,配置的时候问题不断,这种 ...

  4. socket参数的详解

    socket参数的详解 socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None) 创建socket对象的参数说明: fami ...

  5. Scala 深入浅出实战经典 第62讲:Scala中上下文界定内幕中的隐式参数实战详解

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...

  6. Scala 深入浅出实战经典 第60讲:Scala中隐式参数实战详解以及在Spark中的应用源码解析

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  7. 基于集合成工控机Ubuntu系统安装分区详解

    基于集合成工控机Ubuntu系统安装分区详解 硬件描述:双核的CPU,128G的固态硬盘 软件描述:使用Ubuntu12.04系统,内核3.8.0-29版本,QT4.8.1版本 1.新建分区表 /de ...

  8. Oracle GoldenGate中HANDLECOLLISIONS参数使用详解

    Oracle GoldenGate中HANDLECOLLISIONS参数使用详解   HANDLECOLLISIONS 是一个 replicat 进程参数,主要在 initial load 中使用.在 ...

  9. 机器学习——随机森林,RandomForestClassifier参数含义详解

    1.随机森林模型 clf = RandomForestClassifier(n_estimators=200, criterion='entropy', max_depth=4) rf_clf = c ...

随机推荐

  1. swift 闭包循环引用

    当使用闭包时,类本身持有self,然后又在闭包中访问了self或者self的属性,就会导致恶心额循环引用.swift提供的解决方法是在闭包中定义捕获列表,捕获列表是闭包想怎么引用捕获来的变量.例如下面 ...

  2. eclipse为方法添加注释的快捷键是什么

    /** * 登录验证 * @param 传入的vo类 * @return * @throws Exception */这种注释快捷键?   先敲“/”在敲两个**,然后回车

  3. MFC对话框显示BMP图片

    1.MFC对话框显示BMP图片我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) ...

  4. 普通硬件就能破解GSM A5加密算法

    如果你还在使用基于早期信号标准的GSM手机,那么你最好在使用手机的过程中小心一点了.因为根据国外媒体的最新报道,安全研究专家通过测试发现,他们只需要使用三张NVIDIA GeForce GTX690显 ...

  5. 利用SegmentedControl切换控制器的view

    #import "ViewController.h" #import "OneViewController.h" #import "TwoViewCo ...

  6. 关于eclipse中DDMS中Emulator Control选项卡为灰色不可用

    首先先感谢版主:http://blog.csdn.net/noname666/article/details/51670905#reply 方法一的出处:http://stackoverflow.co ...

  7. WordPress博客平台的搭建--基于Ubuntu14服务器

    环境:阿里云服务器,系统Ubuntu14.04, 阿里云域名 大致流程:LNMP+WordPress 主要参考博客:VPS+LNMP+WordPress搭建个人网站/博客 遇到的问题: 1.在登陆域名 ...

  8. 用vc生成可被python调用的dll文件

    前提已经有.c 和.i文件 用swid编译了.i文件生成了wrap.c文件和.py文件 vc创建dll工程 将.h加入到头文件中.c文件和wrap.c文件添加到源文件中 将.i文件添加到工程目录下To ...

  9. Oracle 导入导出--and一些知识,备忘

    这两天在做迁移Ora数据库,有一个圆友帮忙,哈哈,两个臭皮匠顶半个诸葛亮. 本来以为很简单的就imp和exp就欧了,结果各种状况百出,百度了老多,学到好多东西. 你的导出:exp yc/yc@orcl ...

  10. [搬砖]Pycharm中启动IPython notebook失败提示load_entry_point ImportError: Entry point ('console_scripts', 'ipython') not found的解决方法

    前提:直接运行ipython正常,“which -a ipython”命令显示也只有一个ipython存在,在ipynb文件中点运行启动notebook时提示错误类似如下: Traceback (mo ...