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

尽管作为 out 参数传递的变量不需要在传递之前进行初始化,但需要调用方法以便在方法返回之前赋值。

我们发现,ref和out似乎可以实现相同的功能.因为都可以改变传递到方法中的变量的值.但是,二者本质的区别就是,ref是传入值,out是传出值.在含有out关键字的方法中,变量必须由方法参数中不含out(可以是ref)的变量赋值或者由全局(即方法可以使用的该方法外部变量)变量赋值,out的宗旨是保证每一个传出变量都必须被赋值

示例演示了out关键字的使用方法,其功能是获取数组中的最大值和最大值的索引

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Out_Key
{
class Program
{
///<summary>
///求数组的最大值和最大值的索引
///</summary>
///<param name="m_Array" >传入的数组</param>
///<param name="m_Index" >要求的最大索引</param>
///<returns >数组中的最大值</returns>
static int MaxIndex(int[] m_Array, out int m_Index)
{
m_Index = ;
int m_Max = m_Array[]; for (int i = ; i < m_Array.Length; i++)
{
if (m_Array[i] > m_Max)
{
m_Max = m_Array[i];
m_Index = i;
}
} return m_Max;
}
static void Main(String[] args)
{
int[] myArray = new int[] { , , , , };
int maxIndex;
Console.WriteLine("数组中最大的值为:{0}", MaxIndex(myArray, out maxIndex));
//调用MaxIndex方法后 maxIndex的值为2
Console.WriteLine("数组中最大的值是第{0}元素", maxIndex + );
Console.ReadKey();
}
}
}

result:

说明:

1.out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于ref 要求变量必须在传递之前进行初始化。

2.方法定义和调用方法都必须显式使用 out 关键字。

3.属性不是变量,因此不能作为 out 参数传递。

二丶

 using System;
using System.Collections.Generic;
using System.Text; namespace sampsong
{
class Program1
{
static void Method(out String name,out String sex)
{
name = "张三";
sex="男";
} static void Main(String[] args)
{
String Name;
String Sex; Method(out Name,out Sex);
Console.WriteLine("调用方法Method后");
Console.WriteLine("学生" + Name + "性别是:"+Sex );
}
}
}
   static void Method(out int i)
{
i = ;
}
static void Main()
{
int value;
Method(out value);
Console.Write(value);
// value is now 44
Console.ReadKey();
}

ref 和 out 关键字在运行时的处理方式不同,但在编译时的处理方式相同。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法。例如,从编译的角度来看,以下代码中的两个方法是完全相同的,因此将不会编译以下代码:

class class Program
{
public void TestMethod(out int i) { }
public void TestMethod(ref int i) { }
}

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

 public void TestMethod(int i) { }
public void TestMethod(out int i) {
i = ;
}

属性不是变量,因此不能作为 out 参数传递。

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

 class Program
{
static void Method(out int a, out string b, out string c)
{
a = ;
b = "I've been returned";
c= null;
}
static void Main()
{
int value;
string str1, str2;
Method(out value, out str1, out str2);
}
}

 三丶yield

1. yield必须出现在IEunmerable中

2. yield是迭代器的状态机,能做到延迟查询,使用的时候才查询,可以实现按序加载

四丶Ref和Out

C#有两种参数传递方式:传值和引用,传值就是变量的值,而引用则是传递的变量的地址;

本文中说的Ref和Out都是引用传递,Ref的重点是把值传给调用方法,Out则是得到调用方法的值,类似于有返回类型的方法返回的值;

在使用两者时一定要注意一下两点,否则编译出现错误

a) ref 变量使用前要先声明同时要赋值 a=20;

b)方法调用参数要加上相应的关键字 ref or out;

static void main()
{
int a = ;
int b = ;
int c;
SwapMethod(ref a, ref b);
Console.WriteLine(" After Swap a is {0},b is {1} ",a,b); OutTest(out c);
Console.WriteLine("The out value is {0}.",c);
} static void SwapMethod(ref int a,ref int b)
{
int tem;
tem = a;
a = b;
b = tem;
} static void OutTest(out int a)
{
a = * ;
}

C#当中的out关键字(借鉴于CSDN)的更多相关文章

  1. 浅谈C#当中的out关键字(转载)+说明

    与ref关键字一样,out关键字也是按引用来传递的. 示例演示了out关键字的使用方法,其功能是获取数组中的最大值和最大值的索引 using System; using System.Collecti ...

  2. swift 2中关键字和解释整理

    1.swift 最新关键字和符号参考:https://developer.apple.com/library/mac/documentation/Swift/Conceptual/Swift_Prog ...

  3. java基础之关键字static

        在java当中有很多关键字,static便是其中一个,它很普通但我们经常需要运用到它,所以要了解static是非常有必要的.   鉴于本人知识结构有限,若有错误忘不吝赐教,甚为感谢.   一. ...

  4. C++11 带来的新特性 (3)—— 关键字noexcept

    1 关键字noexcept 从C++11开始,我们能看到很多代码当中都有关键字noexcept.比如下面就是std::initializer_list的默认构造函数,其中使用了noexcept. co ...

  5. MySQL中any、some、all关键字

    MySQL中any.some.all关键字http://blog.csdn.net/imzoer/article/details/8266324 ANY关键字: 假设any内部的查询语句返回的结果个数 ...

  6. php学习十三:其他关键字

    在php中,其实不止在php中,在其他语言中我们也会常常接触到一些关键字,整理了一下php当中的一下关键字,可能有些不全,希望大家指出来,多多交流,一起进步. 1.final 特性:1.使用final ...

  7. 康冕峰IT技术总结博客CSDN索引

    计算1-x内的质数, 结果保存在mysql中. Java 程序员面试笔试宝典 4.1基础知识https://blog.csdn.net/qq_40993412/article/details/1040 ...

  8. php long time(1)

    好久好久没有发表新的文章了,主要是懒得在这里写,都记在记事本上,所得都是自己理解的情况下写的,如今借此闲暇记录下来,:::: ****************PHP****************** ...

  9. 基础算法-查找:线性索引查找(I)

    前面介绍的几种查找的算法都是基于数据有序的基础上进行的.但是在实际的应用中,很多数据集可能有惊人的数据量,面对这些海量的数据,要保证记录全部按照当中的某个关键字有序,其时间代价是非常昂贵的,所以这种数 ...

随机推荐

  1. 【bzoj3105】【cqoi2013】【新Nim游戏】【线性基+贪心】

    Description 传统的Nim游戏是这种:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量能够不同).两个游戏者轮流操作,每次能够选一个火柴堆拿走若干根火柴.能够仅仅拿一根,也能够拿走整堆火柴 ...

  2. 转 java中5种创建对象的方法

    作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有5种创建对象的方式,下面给出它们的 ...

  3. Hadoop的学习前奏(二)——Hadoop集群的配置

    前言: Hadoop集群的配置即全然分布式Hadoop配置. 笔者的环境: Linux:  CentOS 6.6(Final) x64   JDK:    java version "1.7 ...

  4. LeetCode 819. Most Common Word (最常见的单词)

    Given a paragraph and a list of banned words, return the most frequent word that is not in the list ...

  5. mac 下安装caffe(一)

    1.brew install --build-from-source -vd boost boost-python 这一步出错:libtool: unrecognized option `-stati ...

  6. 日常工作中常见的mysql优化技巧

    1.介绍一下MYSQL经常使用的优化技巧. MySQL 自带 slow log 的分析工具 mysqldumpslow ,可是没有说明.本文通过分析该脚本,介绍了其用法. slow log 是 MyS ...

  7. singlefile.py

    #! encoding=utf-8 import os import os.path AllFiles = {} MinSize = 8100 def OneDir( DirName ): if Di ...

  8. Android开发常用框架汇总

    作为一名程序猿,好的工具会让你在搬运工的道路上越走越远.以下框架是AC在开发过程中经常会使用到的一些好的框架.列在这里做一个小小的总结,包含但不限于此. 响应式编程 RxJava https://gi ...

  9. luogu 3415 祭坛

    题目大意: 在平面上,有 n 个水晶柱,每个水晶柱可以用一个点表示 如果 4 个水晶柱依次相连可以构成一个四边形,满足其两条对角线分别平行于 x 轴和 y 轴,并且对角线的交点位于四边形内部(不包括边 ...

  10. PCB Genesis 外形加内角孔实现方法

    在PCB工程制作CAM时,经常会遇到外形拐角处直角的,而客户对内角是要求,比如最大内角要求R0.5mm或者不接受内角, 但成型方式为铣方式,又不是啤板成型,那怎么处理才可以达到要求效果呢,在这里介绍2 ...