C#中out的用法

摘要:
out的用法out关键字会导致参数通过引用来传递。ref和out关键字在运行时的处理方式不同,但在编译时的处理方式相同。因此,如果一个方法采用ref参数,而另一个方法采用out参数,则无法重载这两个方法。示例当希望方法返回多个值时,声明out方法很有用。使用out参数的方法仍然可以将变量用作返回类型,但它还可以将一个或多个对象作为out参数返回给调用方法。此示例使用out在一个方法调用中返回三个变量。

out的用法
out关键字会导致参数通过引用来传递。这与ref关键字类似,不同之处在于ref要求变量必须在传递之前进行初始化。若要使用out参数,方法定义和调用方法都必须显式使用out关键字。例如:

classOutExample
{
    static void Method(out inti)
    {
        i = 44;
    }
    static voidMain()
    {
        intvalue;
        Method(outvalue);
        //value is now 44
}
}

尽管作为out参数传递的变量不需要在传递之前进行初始化,但需要调用方法以便在方法返回之前赋值。
ref和out关键字在运行时的处理方式不同,但在编译时的处理方式相同。因此,如果一个方法采用ref参数,而另一个方法采用out参数,则无法重载这两个方法。例如,从编译的角度来看,以下代码中的两个方法是完全相同的,因此将不会编译以下代码:

classCS0663_Example 
{
    //compiler error CS0663: "cannot define overloaded 
    //methods that differ only on ref and out"
    public void SampleMethod(out inti) {  }
    public void SampleMethod(ref inti) {  }
}

但是,如果一个方法采用ref或out参数,而另一个方法不采用这两类参数,则可以进行重载,如下所示:

classRefOutOverloadExample
{
    public void SampleMethod(inti) {  }
    public void SampleMethod(out inti) {  }
}

备注
属性不是变量,因此不能作为out参数传递。
有关传递数组的信息,请参见使用ref和out传递数组。
示例
当希望方法返回多个值时,声明out方法很有用。使用out参数的方法仍然可以将变量用作返回类型(请参见return),但它还可以将一个或多个对象作为out参数返回给调用方法。此示例使用out在一个方法调用中返回三个变量。请注意,第三个参数所赋的值为Null。这样便允许方法有选择地返回值。

classOutReturnExample
{
    static void Method(out int i, out string s1, out strings2)
    {
        i = 44;
        s1 = "I've been returned";
        s2 = null;
    }
    static voidMain()
    {
        intvalue;
        stringstr1, str2;
        Method(out value, out str1, outstr2);
        //value is now 44
        //str1 is now "I've been returned"
        //str2 is (still) null;
}
}

免责声明:文章转载自《C#中out的用法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇RTMP流媒体播放过程(转)win10 hyper-v与VMware冲突解决下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Shell 编程

  Shell 是一门脚本语言(又称解释型语言),Shell 其实就是一个纯文本文件,通常以【#!/bin/bash】开始。脚本自上而下,从左至右分析并执行,其中【#】后面的为注释。脚本有以下几种运行方式:(1) 【bash shell.sh】 (2)【sh shell.sh】(3)【./shell.sh】当前目录下执行,用户必须有可执行权限 (4)【. ....

VS调试技巧

下面有从浅入深的6个问题,您可以尝试回答一下 一个如下的语句for (int i = 0; i < 10; i++){if (i == 5)j = 5;},什么都写在一行,你怎么在j=5前面插入断点 在一个1000次的循环体内部设置断点,你希望当循环进行到900次后中断,怎么才能做到呢? 你有一个表达式在上面循环的某一次发生了变化,你想知道是哪一次...

批处理for命令详解(转)

FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能! 看看他的基本格式(这里我引用的是批处理中的格式,直接在命令行只需要一个%号)FOR 参数 %%变量名 IN (相关文件或命令) DO 执行的命令 参数:FOR有4个参数 /d /l /r /f 他们的作用我在下面用例子解释%%变量名 :这个变量名可以是小写a-z或者大写A-Z,他们区分大小写...

Debug与Release版本的区别

  Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动。如果我们愿意,我们完全可以把Debug和Release的行为完全颠倒过来。当然也可以提供其他的模式,例如自己定义一组编译选项,然后命名为MY_ABC等。习惯上,我们仍然更愿意使用VC已经定义好的名称。    Debug版本包括调试...

转:Eclipse Debug 界面应用详解——Eclipse Debug不为人知的秘密

今天浏览csdn,发现一文详细的描述了Eclipse Debug中的各个知识点,非常详尽!特此记录。 Eclipse Debug不为人知的秘密 http://blog.csdn.net/mgoann/article/details/7239492 Debug视图 认识debug视图,红色部分框为线程堆栈视图,黄色部分框为表达式、断点、变量视图,蓝色...

windows7安装docker异常:looks like something went wrong in step ‘looking for vboxmanage.exe’

一、背景 最近准备抽点时间研究下docker,选择在家中的windows系统上安装。 我的系统是windows7,首先安装Docker Toolbox,Docker Toolbox是一个工具集,主要包含如下内容: Docker CLI 客户端,用来运行docker引擎创建镜像和容器 Docker Machine. 可以让你在windows的命令行中运行do...