在C#中 out 关键字会导致参数通过引用来传递。
这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。
若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace study
{
public class Program
{
/// <summary>
/// ref关键字可以让一个值类型的输入按引用传递
/// </summary>
private static void refFunction(int x,ref int a)
{
a = a * x;
}
/// <summary>
/// out关键字的使用
/// 使用out关键字,输入参数str在传递给outKeyWord()方法前不必进行初始化,如果没有关键字,是无法编译的
/// </summary>
private static void outKeyWord(out string str)
{
//输出参数str在方法返回前必须被赋值
str = "a string";
}
static void Main(string[] args)
{
//***********ref关键字的使用
int x = 12, a = 5;
Console.WriteLine(a);//输出:5
refFunction(x, ref a);
Console.WriteLine(a);//输出:60
//***********out关键字的使用
string str;//不必初始化
outKeyWord(out str);//输出:a string
Console.WriteLine(str);
Console.ReadKey();
}
}
}
out 关键字会导致参数通过引用来传递。
这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。
若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。
例如:
class OutExample
{
static void Method(out int i)
{
i = 44;
}
static void Main()
{
int value;
Method(out value);
// value is now 44
}
}
尽管作为 out 参数传递的变量不需要在传递之前进行初始化,但需要调用方法以便在方法返回之前赋值。
ref 和 out 关键字在运行时的处理方式不同,但在编译时的处理方式相同。
因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法。
例如,从编译的角度来看,以下代码中的两个方法是完全相同的,因此将不会编译以下代码:
class CS0663_Example
{
// compiler error CS0663: "cannot define overloaded
// methods that differ only on ref and out"
public void SampleMethod(out int i) { }
public void SampleMethod(ref int i) { }
}
但是,如果一个方法采用 ref 或 out 参数,而另一个方法不采用这两类参数,则可以进行重载,如下所示:
class RefOutOverloadExample
{
public void SampleMethod(int i) { }
public void SampleMethod(out int i) { }
}
备注
--------------------------------------------------------------------------------
属性不是变量,因此不能作为 out 参数传递。
有关传递数组的信息,请参见使用 ref 和 out 传递数组。
示例
--------------------------------------------------------------------------------
当希望方法返回多个值时,声明 out 方法很有用。
使用 out 参数的方法仍然可以将变量用作返回类型(请参见 return),
但它还可以将一个或多个对象作为 out 参数返回给调用方法。
此示例使用 out 在一个方法调用中返回三个变量。
请注意,第三个参数所赋的值为 Null。这样便允许方法有选择地返回值。
class OutReturnExample
{
static void Method(out int i, out string s1, out string s2)
{
i = 44;
s1 = "I've been returned";
s2 = null;
}
static void Main()
{
int value;
string str1, str2;
Method(out value, out str1, out str2);
// value is now 44
// str1 is now "I've been returned"
// str2 is (still) null;
}
}
分享到:
相关推荐
如果我们将ref关键字换成out关键字,代码如下: static void TestRefAndOut() { string s1 = "Good Luck!"; //TestRef(ref s1); TestOut(out s1); Console.WriteLine(s1);//output: Hello World! } static...
C#中的关键字 C#语言中有多种关键字,用于定义类、方法、变量、语句等各种语言元素。在本文中,我们将对C#中的关键字进行总结和解释。 一、访问修饰符关键字 * public:访问修饰符,表示该成员可以从该类外部访问...
在名为`refAndoutTest`的压缩包文件中,可能包含了一个或多个C#源代码文件,这些文件用于演示`ref`和`out`关键字的实际应用。通过查看和分析这些代码,你可以更深入地理解这两个关键字的工作原理和应用场景。在学习...
C# 中的关键字(共 76 个) C# 中的关键字是语言的基本组成部分,它们定义了程序的结构、行为和语义。下面我们将详细介绍 C# 中的 76 个关键字。 abstract:标识一个可以扩展但不能被实体化的类或方法。抽象类不能...
C#为此提供了`ref`和`out`两个关键字,它们虽然有着类似的功能,但在使用场景和约束条件上有明显差异。 #### 1. `ref` 关键字详解 - **初始化要求**:使用`ref`传递参数时,该参数必须已经初始化过。这意味着在调用...
本文将深入解析C#中涉及的几种关键参数传递机制:值类型的基本传递、`ref`关键字以及`out`关键字,并通过具体示例来说明这些传递方式的区别及应用场景。 ### 值类型的参数传递 在C#中,当我们将一个值类型(如基本...
### C#中的`ref`、`out`和`params`的区别 #### 一、概述 在C#编程语言中,`ref`、`out`和`params`是三种不同的参数修饰符,它们分别用于控制方法如何处理传入的参数。这些关键字在不同的场景下提供了非常有用的...
通过上面的例子和解释,我们可以看到 `in`、`ref` 和 `out` 关键字在C#中的不同用途: - `in` 用于值传递,方法内部无法修改参数。 - `ref` 用于引用传递,可以在方法内部修改并更新原始变量。 - `out` 也是用于引用...
在C#语言中,`ref`和`out`是两个非常重要的关键字,它们主要用于处理函数参数的传递方式。通常情况下,在C#中调用方法时,参数是以值传递的方式进行的,也就是说,方法内的参数改变不会影响到方法外的原始变量。然而...
下面将详细探讨`out`和`ref`在C#中的具体应用及其差异。 ### `out`关键字 `out`关键字用于指示方法的参数应该被视作输出参数,这意味着方法将负责给该参数赋值。在调用带有`out`参数的方法时,传递给它的变量可以...
- 其他操作符关键字:例如 ref(引用传递参数)、out(输出参数)、in(输入参数)、out(输出参数)、namespace(定义命名空间)、using(用于命名空间或资源清理)、extern(外部方法的修饰符)等。 5. 异步编程...
C#是一种面向对象的编程语言,其语法结构严谨,包含了值关键字和非值关键字。值关键字主要用于声明变量,表示特定的数据类型,而非值关键字则用于构建程序结构和控制流程。 1. 值关键字: - `bool`:布尔类型,...
在C#编程语言中,`ref`和`out`关键字是两种特殊的参数传递方式,它们允许函数修改调用者提供的变量的值。虽然这两种关键字在功能上有些相似,但它们的使用场景和语法规则有所不同。本文将深入探讨`ref`和`out`的用法...
C# 中的三个关键字:params、ref、out 在 C# 编程语言中,有三个关键字非常重要,即 params、ref 和 out。这三个关键字都是用于方法参数的,但它们有不同的作用和用途。本文将详细介绍这三个关键字的用法和原理。 ...
在C#编程语言中,`ref` 和 `out` 关键字用于参数传递,它们都是为了改变函数调用时实参的值。然而,两者在使用上存在一些关键区别,理解这些差异对于编写高效且正确的代码至关重要。 1. **传值方式**: 在C#中,...
因此,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢? MSDN: ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该...
在C#编程中,`ref`和`out`关键字是用来处理方法参数的特殊方式,它们允许函数修改调用者提供的变量。虽然这两种关键字在某些方面很相似,但也存在关键的区别。 `ref`关键字: 1. `ref`参数要求在传递到方法之前必须...
- **调用者必须显式使用ref关键字**:在调用带有`ref`参数的方法时,调用者也必须使用`ref`关键字来传递参数。这样做的目的是为了让编译器能够确保在传递前变量已经被初始化。 ##### 示例代码: ```csharp void ...
在C#编程语言中,`out`和`ref`都是用于方法参数传递的关键字,它们允许函数修改调用者提供的变量值。虽然这两个关键字看似相似,但它们在使用上有着本质的区别,理解这些区别对于编写高效、清晰的代码至关重要。 ...
在C#编程中,`ref`和`out`关键字是用来传递参数的重要机制,它们允许函数修改传入变量的值。这两个关键字在处理数组对象时也具有特殊的应用,因为数组在C#中被视为对象,拥有自己的引用。理解这些关键字在数组上下文...