首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我必须在C#中指定"out"关键字?

在C#中,"out"关键字是用于表示参数的传递方式。当一个参数被标记为"out"时,它表示该参数是一个输出参数,即该方法会修改这个参数的值。这意味着,当你将一个变量传递给带有"out"参数的方法时,你需要在调用方法时显式地使用"out"关键字。

例如,考虑以下方法:

代码语言:csharp
复制
public static int Add(int a, int b, out int sum)
{
    sum = a + b;
    return sum;
}

在这个例子中,"out"关键字用于表示"sum"参数是一个输出参数。当你调用这个方法时,你需要显式地使用"out"关键字来传递一个变量,以便该方法可以修改它的值。例如:

代码语言:csharp
复制
int result;
int sum = Add(1, 2, out result);

在这个例子中,我们将一个名为"result"的变量传递给"Add"方法,并使用"out"关键字来表示它是一个输出参数。这样,当"Add"方法返回时,"result"变量的值将被修改为"sum"参数的值。

总之,"out"关键字在C#中用于表示输出参数,并且在调用带有输出参数的方法时需要显式地使用"out"关键字。这有助于确保在方法调用期间正确地传递和修改参数值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C#学习笔记之一】C#关键字

C#关键字 关键字是对编译器具有特殊意义的预定义保留标识符。它们不能在程序中用作标识符,除非它们有一个 @ 前缀。例如,@if 是有效的标识符,但 if 不是,因为 if 是关键字。...语句关键字C# 参考) 语句是程序指令。 除了下表引用的主题中介绍的以外,语句都是按照顺序执行的。 下表列出了 C# 语句关键字。...文字关键字C# 参考) C# 有下列文字关键字: null true false default 上下文关键字C# 参考) 上下文关键字用于提供代码的特定含义,但它不是 C# 的保留字。...C# 3.0 引入的所有查询关键字也都是上下文相关的。有关更多信息, 查询关键字C# 参考) 本节包含查询表达式中使用的上下文关键字。...select 指定当执行查询时返回的序列的元素将具有的类型和形式。 group 按照指定的键值对查询结果进行分组。

2.4K50

C#关键字常见面试题

C#访问修饰符 访问修饰符的作用 访问修饰符是用于指定成员或类型的声明可访问性的关键字。...C# 的 in 关键字有什么作用? in 关键字用于参数传递时,将参数按只读引用传递。使用 in 关键字可以提高性能,避免不必要的参数复制。 在 C# ,in 关键字用于将参数标记为输入参数。...C# out 关键字有什么作用? 参数在使用 out 关键字进行引用传递时,不需要在方法调用之前进行初始化。 out 关键字通常用于表示方法返回多个值的情况,或者用于修改方法外部的变量。...out 参数必须在方法内部进行初始化,并确保在方法结束前完成赋值操作。方法内部没有为 out 参数赋值的情况下,方法调用将会导致编译错误。 C#参数传递 ref与out 的区别?...out 指定此参数由引用传递,指定的参数在进入函数时会清空参数值,因此该参数必须在调用函数内部进行初始化赋值操作(无进有出)。 总结: ref 和 out 都用于引用传递参数。

15010

C#基础知识大总结(在C语言的基础上)

前言 本文为C#基础知识,是在有一定C语言或C++基础上进行的总结,因此会省略许多C语言的基础知识,但是对一些C#特有或者是C语言中比较少见或重要的知识也会归纳到博文里。...可以在struct语句块 不能在函数声明!!!...            out不用 out传入的变量必须在内部赋值     ref不用 int a; ChangeValueRef(ref a);//会报错!...必须初始化 ChangeValueOut(out a);//不会报错 五、变长参数和参数默认值 1.变长参数关键字  params int[] 意味着可以传入n个int参数 n可以等于0 传入的参数会存在...arr数组当中 注意: params关键字后面为数组 数组的类型可以是任意一个类型 函数参数可以有别的参数和params修饰的参数 函数参数中最多只能出现一个params 并且一定要是放在最后的参数

18620

C#面试题及答案_c++面试题库

大家好,又见面了,是你们的朋友全栈君。...关键字 ref : 方法定义和调用方法都必须显式使用 ref 关键字,传递到 ref 参数的参数必须初始化,否则程序会报错 out : 方法定义和调用方法都必须显式使用 out关键字...,out关键字无法将参数值传递到out参数所在的方法,只能传递参数的引用(个人理解),所以out参数的参数值初始化必须在其方法内进行,否则程序会报错 相同点: ref和out都是按地址传递,使用后都将改变原来参数的数值...一定程度上解决了C#的函数只能有一个返回值的问题 不同点: ref将参数的参数值和引用都传入方法,所以ref的参数的初始化必须在方法外部,进行,也就是ref的参数必须有初始化值...,否则程序会报错 out不会将参数的参数值传入方法,只会将参数的引用传入方法,所以参数的初始化工作必须在其对用方法中进行,否则程序会报错 参考链接: https://www.cnblogs.com

53620

ref 和 out 的区别

浏览量 2 ref和out都是C#关键字,所实现的功能也差不多,都是指定一个参数按照引用传递。对于编译后的程序而言,它们之间没有任何区别,也就是说它们只有语法区别。...总结起来,他们有如下语法区别: 1、ref传进去的参数必须在调用前初始化,out不必,即: int i; SomeMethod( ref i );//语法错误 SomeMethod( out i );/.../通过 2、ref传进去的参数在函数内部可以直接使用,而out不可: public void SomeMethod(ref int i) {    int j=i;//通过    //... } public...void SomeMethod(out int i) {    int j=i;//语法错误 } 3、ref传进去的参数在函数内部可以不被修改,但out须在离开函数体前进行赋值。...ref在参数传递之前必须初始化;而out则在传递前不必初始化,且在 … 值类型与引用类型之间的转换过程称为装箱与拆箱。

40230

C# ref与out关键字解析

简介:ref和outC#开发中经常使用的关键字,所以作为一个.NET开发,必须知道如何使用这两个关键字. 1、相同点 ref和out都是按地址传递,使用后都将改变原来参数的数值。...(2)、out关键字 (1)、使用out关键字的注意点: i、方法定义和调用方法都必须显式使用 out关键字 ii、out关键字无法将参数值传递到out参数所在的方法,只能传递参数的引用(个人理解),...所以out参数的参数值初始化必须在其方法内进行,否则程序会报错 iii、通过out的这个特性,一定程度上解决了C#的函数只能有一个返回值的问题 (2)、代码示例 using System; using...b = 1; } } } (3)、ref和out的区别 通过上面的解析,ref和out最主要的区别是: ref将参数的参数值和引用都传入方法,所以ref的参数的初始化必须在方法外部...,进行,也就是ref的参数必须有初始化值,否则程序会报错 out不会将参数的参数值传入方法,只会将参数的引用传入方法,所以参数的初始化工作必须在其对用方法中进行,否则程序会报错 (4)、ref和out

50660

C#基础知识 之 ✨ ref 和 out 之间的江湖趣闻

ref 和 out 之间的江湖趣闻 本片文章将详细介绍一下在C#关键字:ref 和 out 的使用和区别 话不多说,下面开始介绍啦 ?...如果需要将方法的每一个参数都设置为ref类型参数,则需要在每一个参数前面加上ref关键字修饰。...在 C# ,使用 ref 关键字声明引用参数 输出参数: return 语句可用于只从函数返回一个值。但是,可以使用 输出参数 来从函数返回两个值。...在 C# ,使用 out关键字声明输出参数 ref 和 out 的定义 简单了解一下引用参数与输出参数,下面就可以对ref和out有一个更清楚的定位和认知了。...关键字“ref“和”out”之间的唯一区别:使用ref需先赋初值,使用out则需在方法体赋值。 整体来说,系统对ref的限制是更少一些的。

85150

java学习:OOP入门

= 1;     //注:abstract关键字,可省略 abstract void Run(); } 实现接口必须在定义类时,使用implements关键字 package jmyang.oop...    } } 4、java:final 与 c#:sealed 如果一个类不想被其它类所继承,可以在定义类时,用final关键字修饰,这跟c#的sealed关键字作用相同....注:c#static关键字可以用来修饰类,表示该类不能被继承,而且类的方法/字段,都必须是static类型,java没有对应的概念(java的static也不能用于class定义) 6、常量表示法...(java:final 与 c#:const) java要表示常量 ,只要在定义变量时,加一个final关键字即可,表示该变量不可再被修改,这类似于c#的const关键字(java其实也有const..."实例化的对象"调用,而c#则不允许。

70890

C#语法糖

二.隐式类型(var) var定义变量有一下四个特点: 1、必须在定义时初始化 2、一旦初始化完成,就不能再给变量赋与初始值不同类型的值了 3、var要求是局部变量 4、使用var定义变量和object...调用其方法时,可以重新指定分配了默认值的参数,也可以使用默认值。重新指定分配默认值的参数时,可以显式地为指定参数名称赋值;隐式指定的时候,是根据方法参数的顺序,靠C#编译器的推断。...现在定义一个匿名对象来表示一个人 var aPeople=new {pName="张三",pAge=26,pSex="男"}; 六、扩展方法 为什么要有扩展方法,就是为了在不修改源码的情况下,为某个类增加新的方法...它必须放在一个非嵌套、非泛型的静态类(的静态方法);它至少有一个参数;第一个参数必须附加this关键字;第一个参数不能有任何其他修饰符(out/ref).第一个参数不能是指针类型。...筛选集合where:需要提供一个带bool返回值的“筛选器”,从而标明集合某个元素是否应该被返回。

73420

c#基础系列3---深入理解ref 和out

扩展阅读 c#基础系列1---值类型和引用类型 c#基础系列2---深入理解 String 在上篇文章深入理解值类型和引用类型的时候,有的小伙伴就推荐说一说ref和out 关键字,昨天晚上彻夜难眠在想是否要谈一下呢...应用场景 out 修饰函数参数,以传递引用的方式向函数传递参数。 out 关键字也可与泛型类型参数结合使用,以指定该类型参数是协变参数 ref 修饰函数参数,以传递引用的方式向函数传递参数。...在方法签名,按引用将值返回给调用方。此功能在c# 7.0新加。即:引用返回值。...关于值类型指针 有的同学会有疑问,值类型变量其实就是值本身,为什么也会有指针呢?这种问题其实自己仔细一想就会知道,无论值类型还是引用类型值都是分配在内存,就会有内存地址的概念。...既然都有内存地址,那就无所谓值类型和引用类型了 c#7.0+ 关于c# 7.0 +对ref或者out功能的增强请自行查找msdn。 疑问???

90610

C#协变和逆变

正因如此,所以微软新增了两个关键字Out,In,下面是他们的msdn解释: 协变的英文是:“covariant”,逆变的英文是:“Contravariant” 为什么Microsoft选择的是”Out...个人的理解: 因为协变和逆变的英文太复杂了,并没有体现协变和逆变的不同,但是out 和 in 却很直白。...目前out 和in 关键字只能在接口和委托中使用,微软使用out 和 in 标记的接口和委托大致如下: 先看下第一个IEnumerable  和刚开始说的一样,T 用out 标记,所以T代表了输出...想要回答这个问题需要在回头看看Clr via C# 关于泛型和接口的章节了,就不解释了,  答案是不可以。  上面演示的是协变,接下来要演示下逆变。 ...In 关键字:逆变,代表输入,代表着只能被使用,不能作为返回值,所以C#编译器可以根据in关键字推断这个泛型类型只能被使用,所以Action actionDog = actionAnimal;

92830

C#基础知识系列一(goto、i++、三元运算符、ref和out、String和string、重载运算符)

这与 out 不同,后者的参数在传递之前不需要显式初始化。 再来看一下out:out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。...若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。...也可以这样理解:string是C#字符串类型String的反射,一种简化的书写方式,就像int对应于Int32一样,二者在C#可通用。 再则String是一个类,string是一种数据类型。...string是c#的类,String是.net Framework的类(在c# IDE不会显示蓝色) c# string映射为.net Framework的String。...这样一看原来很多基础的东西从来都不清楚,或者见过然后忘记了。自己在此好好的进行整理总结一下,主要是为了自己复习巩固吧,也希望对某些人有一点作用,当然的整理可能存在很多问题,欢迎大牛们来指正。

72820

C# .NET面试系列一:基础语法

这就是为什么 `2 << 3` 的结果是16。在二进制,左移运算符 `<<` 是将二进制数向左移动指定的位数。对于整数2,它的二进制表示是 `0000 0010`。...23. ref 和 out 有什么区别ref 和 out 都是在C#中用于参数传递的关键字,它们有一些区别,主要体现在以下几个方面:初始值:ref 关键字要求在传递给方法之前必须先为变量赋初值,即在方法调用前必须对变量进行初始化...// ref 的示例int x = 10;MyMethod(ref x); // 必须在调用前为 x 赋值// out 的示例int y;MyMethod(out y); // 不需要在调用前为 y 赋值方法内部对参数的要求...out 关键字在方法内部要求对变量重新赋值,因为方法内部不能使用未赋值的 out 参数。...必须在方法内部为 b 赋值 b = 42;}方法调用时的要求:在方法调用时,ref 和 out 关键字都要求在实参和形参上都使用相同的修饰符。

18310

关于.NET参数传递方式的思考

,吃想吃的东西。)。...意味着方法将获得它专用的一个值类型实例副本,调用者的实例不受影响。     在CLR中允许以传引用而非传值的方式传递参数,在C#中使用out和ref来实现传递引用的方式传值。...在C#中使用out和ref来实现传递引用的方式传值,这两个关键字告诉编译器生成元数据来指明该参数是传引用的,编译器将生成代码来传递参数的地址,而不是传递参数本身。...在写C#代码与COM对象模型进行互操作时,C#的可选参数和命名参数功能是最好用的,调用一个COM组件时,为了以传引用的方式传递一个实参,C#还允许省略REF/OUT,在嗲用COM组件时,C#要求必须向实参应用...OUT.REF关键字

1.9K90

C#的override和new关键字

然而C#必须使用virtual关键字显示声明该函数是虚函数,然后在子类中使用override关键字重写父类方法,这才真正实现了对父类方法的重写,才能实现多态(C++的多态就是使用虚函数实现的,而且和...正确的结果是: 使用override关键字修饰的方法 这是一个虚方法 为什么使用关键字new修饰的方法,调用的是父类的方法呢? 是不是很奇怪?...可以从派生类中使用 base 关键字调用基类方法。 override、virtual 和 new 关键字还可以用于属性、索引器和事件。 默认情况下,C# 方法为非虚方法。...若要使方法成为虚方法,必须在基类的方法声明中使用 virtual 修饰符。然后,派生类可以使用 override 关键字重写基虚方法,或使用 new 关键字隐藏基类的虚方法。...如果 override 关键字和 new 关键字均未指定,编译器将发出警告,并且派生类的方法将隐藏基类的方法。

1.3K20

6-方法

当编译器看到源代码的“+”时,就会去看其中的操作数据 类型中有哪一个定义了参数类型和操作类型兼容的、名为op_Addition的specialname 方法。...CLR当然也支持按引用的方式传递参数,C#中用out和ref 关键字来支持。这两个关键字告诉编译器产生额外的元数据来表示指定的参数是按 引用的方式传递的[参数的地址,而不是参数本身的值]。...out修饰的参数在调用前可以不初始化,并且被调方法不能 接读取该参数的值,必须在方法返回之前为参数赋值。ref修饰的参数调用前则必须初 始化。...可以根据out和ref参数进行方法重载,但是它们两个之间[也就是只区分out和ref]不能构成重载。...7.虚方法 virtual关键字修饰的方法称为虚方法,此方法允许派生类型重写该方法。

64650

C Sharp(二)

C Sharp(二) 發佈於 2018-10-16 这一篇,我们看看 C# 的类有哪些特殊的概念。...在声明本地变量时可以使用 var 关键字,条件是: 只能用于本地变量,不能用于字段 只能用于声明时包含初始化的语句 一旦编译器推断出类型,他就是固定且不能更改的 注意: C# 的 var 与 JavaScript...out 关键字 实参必须是变量 在方法内部,输出参数在能被读取之前必须被赋值,这意味着,参数初始值是无用的,没必要在调用输出参数方法时给输出参数初始化 在方法返回之前,所有路径都必须已经给输出参数进行过一次赋值...也要注意与继承概念的方法重写(method override)的区别 命名参数 之前我们讲的都是位置参数,此外 C# 还允许使用命名参数。...可选参数 C# 还允许可选参数,我们需要在函数声明时在可选参数中指定默认值: public int Calc(int a, int b = 3) { return a + b; } Calc

57620

通俗易懂的ref和out区别

ref 和 outC#开发中经常用到的两个关键字,但是很多人没有搞清楚这两个关键字的具体区别,下面我们来说一下这两个关键的区别。...不同: ref 将参数值传进方法, out 无法将参数值传入方法; ref 传入参数前必须先初始化, out 不必在参数传输方法前初始化,但必须在方法初始化; ref 用在需要被调用的方法修改调用者的引用的时候..., out 用在需要返回多个结果的地方。...(); } // 无法将的参数值50传入 ,但是必须在方法初始化 static void OutFunction(out int num) { //初始化 num = 120;...小拓展:如果一个方法采用ref或out参数,而另一个方法不采用这两类参数,则可以进行重载。

67330
领券