C#当中的out关键字(借鉴于CSDN)
一丶与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)的更多相关文章
- 浅谈C#当中的out关键字(转载)+说明
与ref关键字一样,out关键字也是按引用来传递的. 示例演示了out关键字的使用方法,其功能是获取数组中的最大值和最大值的索引 using System; using System.Collecti ...
- swift 2中关键字和解释整理
1.swift 最新关键字和符号参考:https://developer.apple.com/library/mac/documentation/Swift/Conceptual/Swift_Prog ...
- java基础之关键字static
在java当中有很多关键字,static便是其中一个,它很普通但我们经常需要运用到它,所以要了解static是非常有必要的. 鉴于本人知识结构有限,若有错误忘不吝赐教,甚为感谢. 一. ...
- C++11 带来的新特性 (3)—— 关键字noexcept
1 关键字noexcept 从C++11开始,我们能看到很多代码当中都有关键字noexcept.比如下面就是std::initializer_list的默认构造函数,其中使用了noexcept. co ...
- MySQL中any、some、all关键字
MySQL中any.some.all关键字http://blog.csdn.net/imzoer/article/details/8266324 ANY关键字: 假设any内部的查询语句返回的结果个数 ...
- php学习十三:其他关键字
在php中,其实不止在php中,在其他语言中我们也会常常接触到一些关键字,整理了一下php当中的一下关键字,可能有些不全,希望大家指出来,多多交流,一起进步. 1.final 特性:1.使用final ...
- 康冕峰IT技术总结博客CSDN索引
计算1-x内的质数, 结果保存在mysql中. Java 程序员面试笔试宝典 4.1基础知识https://blog.csdn.net/qq_40993412/article/details/1040 ...
- php long time(1)
好久好久没有发表新的文章了,主要是懒得在这里写,都记在记事本上,所得都是自己理解的情况下写的,如今借此闲暇记录下来,:::: ****************PHP****************** ...
- 基础算法-查找:线性索引查找(I)
前面介绍的几种查找的算法都是基于数据有序的基础上进行的.但是在实际的应用中,很多数据集可能有惊人的数据量,面对这些海量的数据,要保证记录全部按照当中的某个关键字有序,其时间代价是非常昂贵的,所以这种数 ...
随机推荐
- 【ora10,4】oracle后台进程介绍:
一.SMON(System MONitor) 系统监控进程: 在数据库启动过程中,SMON排在CKPT进程之后,在Oracle9i中排在第六号的位置: PMON started with p ...
- vmware里面的linux怎么和windows相互传文件
我们常常遇到这样的问题.高版本号的vmware遇到低版本号的linux.使用起来就比較抠脚,比方低版本号的linux安装在高版本号的vmware里. 1.不能全屏显示虚拟机 2.每次切换出来.总要按一 ...
- jQuery事件传播,事件流
一. jQuery事件传播 在DOM2级事件模型中,一旦事件被触发.事件流首先从DOM树顶部(文档节点)向下传播.直到目标节点.然后再从目标节点向上传播到DOM树顶.从上到下的过程被称为捕获阶段.从下 ...
- BestCoder Round #61 (div.2) B.Game 细节题
Game 问题描述 XY在玩一个游戏:有N根柱子排成一排,编号为1到N,每个柱子上面有一块宝石,现在XY站在第S根柱子上,出口在第T跟柱子上,XY需要拿到所有宝石后从出口离开.每次XY可以走到相邻 ...
- 怎样编辑LRC歌词
恭喜恭喜歌词 唐嫣 - 音乐巴士 http://www.yy8844.cn/geci/mswcn/nvunns.shtml 恭喜恭喜歌词感谢 音乐巴士 珍妮 编辑歌词匹配时间为: 03 分 06 秒 ...
- Codeforces Round #313 A. Currency System in Geraldion(简单题)
A. Currency System in Geraldion time limit per test 2 seconds memory limit per test 256 megabytes in ...
- Unable to update auto-refresh reference 'microsoft.codedom.providers.dotnetcompilerplatform.dll'.
Unable to update auto-refresh reference 'microsoft.codedom.providers.dotnetcompilerplatform.dll'. Ca ...
- WPF,Silverlight与XAML读书笔记(3) - 标记扩展
hystar的.Net世界 博客园 首页 新闻 新随笔 联系 管理 订阅 随笔- 103 文章- 0 评论- 107 WPF,Silverlight与XAML读书笔记(3) - 标记扩展 说 ...
- 全面解析布局(Grid & Canvas &StackPanel &Wrappanel) 转
写这篇文章前,特意在百度搜索了一下,发现目前网上介绍布局的文章不多,质量也不是很高.拿grid和canvas来讲,这两个布局容器还是有许多小细节值得讲的,如果你不了解的话,开发中经常会遇到一些让人匪夷 ...
- typescript 入门例子 Hello world——ts就是一个宿主机语言
安装 TypeScript TypeScript 的命令行工具安装方法如下: npm install -g typescript 安装完成之后,就有了 tsc 命令.编译一个 TypeScript 文 ...