这是三个关键字通过字面不是很好理解,我通过三个demo
分别表示一下。
Params
:
public
static
void
UseParams
(params
object
[]
list)
{
for
(int
i = 0; i < list.Length; i++)
{
Console
.WriteLine(list[i]);
}
}
static
void
Main(string
[]
args)
{
UseParams ('a'
, "aa"
,"3"
);
UseParams ('b'
, "shit"
);
UseParams ("ok"
);
Console
.Read();
}
|
通过上面的Demo
可以总结出Params
在方法的参数数目可变的时候使用,需要注意的是在方法声明中使用params
关键字之后不允许再有任何其他参数,并且方法声明中只允许有一个params
关键字;
Ref
:
public
static
void
UseRef(ref
int
i)
{
i += 100;
Console
.WriteLine("i = {0}"
, i);
}
static
void
Main(string
[]
args)
{
int
i = 10;
Console
.WriteLine("Before the method calling: i = {0}"
,
i);
UseRef(ref
i);
Console
.WriteLine("After the method calling: i = {0}"
,
i);
Console
.Read();
}
//
控制台输出:
//Before
the method calling : i = 10
//i = 110
//After the
method calling: i = 110
|
通过这个Demo
发现使用ref
关键字,使参数按引用传递,其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
说明:
1
、若要使用 ref
参数,则方法定义和调用方法都必须显式使用 ref
关键字。
2
、传递到 ref
参数的参数必须最先初始化。这与 out
不同,out
的参数在传递之前不需要显式初始化。
3
、属性不是变量,因此不能作为 ref
参数传递。
4
、尽管 ref
和 out
在运行时的处理方式不同,但它们在编译时的处理方式是相同的。因此,如果一个方法采用 ref
参数,而另一个方法采用 out
参数,则无法重载这两个方法。例如,从编译的角度来看,以下代码中的两个方法是完全相同的。如果尝试这么做,将导致不能编译该代码。
5
、如果一个方法采用 ref
或 out
参数,而另一个方法不采用这两类参数,则可以进行重载。
Out
:
public
static
void
UseOut(out
int
i)
{
i = 10;
i += 100;
Console
.WriteLine("i = {0}"
, i);
}
static
void
Main(string
[]
args)
{
int
i;
UseOut(out
i);
Console
.WriteLine("After the method calling: i = {0}"
,
i);
Console
.Read();
}
|
通过上面发现out
与ref
十分相似,不同之处在于:
1
、ref
要求变量必须在传递之前进行初始化。
2
、尽管作为 out
参数传递的变量不需要在传递之前进行初始化,但需要调用方法以便在方法返回之前赋值。
分享到:
相关推荐
C# 中的三个关键字:params、ref、out ...params 关键字用于方法参数长度不定的情况,ref 关键字用于引用类型参数,而 out 关键字用于返回多个值。理解这三个关键字的用法和原理对于 C# 开发者非常重要。
在C#编程语言中,`ref`、`out`和`params`是三个重要的关键字,它们用于处理方法的参数传递。下面将详细解释这三个关键字的含义、用途以及它们之间的区别。 1. `params` `params`关键字允许方法接受可变数量的参数...
在Unity3D编程中,了解如何使用`ref`、`out`和`params`这些特殊的参数修饰符是非常关键的,因为它们能让你更灵活地处理方法间的参数传递。接下来我们将详细探讨这三个关键字的区别和应用场景。 首先,`ref`关键字...
在C#编程语言中,`ref`、`out`和`params`是三种不同的参数修饰符,它们分别用于控制方法如何处理传入的参数。这些关键字在不同的场景下提供了非常有用的功能,使得开发者能够更加灵活地编写代码。 #### 二、`ref` ...
- 方法可以有多个out参数,但在方法声明中只能有一个params关键字,所以out参数和params是不兼容的。 - 调用方法时,out参数同样需要显式声明,但其初始值并不重要,因为方法内部会对其进行处理。 3. **Params...
最近在写程序时遇到params,ref,out 参数问题。回头有自习看了看MSDN,才巩固了基础。现在和大家分享一下。paramsparams 关键字在方法成员的参数列表中使用,为该方法提供了参数个数可变的能力,它在只能出现一次...
C#中out参数、ref参数与值参数的用法及区别 C# 中的参数类型有四种:值参数、ref 参数、out 参数和 params 参数。今天,我们将详细介绍 C# 中的 out 参数、ref 参数和值参数的用法及区别。 值参数 -------- 在...
- 其他操作符关键字:例如 ref(引用传递参数)、out(输出参数)、in(输入参数)、out(输出参数)、namespace(定义命名空间)、using(用于命名空间或资源清理)、extern(外部方法的修饰符)等。 5. 异步编程...
在`C#源代码-out参数的使用.zip`压缩包中,我们可能找到了一些示例,展示了如何在实际开发中应用`out`参数。 1. **什么是`out`参数?** `out`关键字是C#中定义方法参数的一种方式,它使得方法能够将多个值传递回调...
* params:定义参数数组。 * ref:定义引用参数。 * sizeof:获取类型的大小。 * stackalloc:在栈上分配数组。 * typeof:获取类型信息。 * unchecked:关闭溢出检查。 * unsafe:定义不安全的代码。 * using:定义using...
在上面的示例中,`PrintNumbers` 方法使用 `params` 关键字来接受任意数量的整数参数,并打印每个参数。 #### 5. 泛型参数(Generic Parameters) 泛型参数允许方法或类具有可变的类型。这提高了代码的复用性和...
输出参数使用`out`关键字,它与`ref`类似,也允许函数修改参数的值。不同之处在于,`out`参数在调用函数时不需要初始化,而且函数必须为`out`参数赋值。一个例子如下: ```csharp public int testOut(out int x, ...
本文将深入探讨Unity中的三个主要参数修饰符:`ref`, `out`, 和 `params`。 1. **`ref` 修饰符**: - `ref` 关键字用于当函数需要修改传入的变量值时。在调用方法前,必须对变量进行初始化,因为`ref`参数传递的是...
总的来说,`params` 关键字提供了一种灵活的方式来处理不确定数量的参数,简化了方法调用的语法,而 `ref` 和 `out` 主要关注参数的值在方法调用中的传递方式。了解并正确使用这些特性可以显著提高代码的可读性和...
out:标识一个参数值会受影响的参数,但在传入方法时,该参数无需先初始化。 override:一个修饰符,表明一个方法将覆载一个虚方法或抽象方法,或一个操作符将覆载基类中定义的同名操作符。 params:声明一个参数...
要实现按引用传递,需使用ref或out关键字: ```csharp public void ModifyByRef(ref int num) { num = num + 1; } int original = 10; ModifyByRef(ref original); // original现在变为11 ``` 三、可选参数 C#...
`out`关键字与`ref`类似,也是进行引用传递,但它要求在函数调用时必须对参数进行初始化,并且函数内部必须为`out`参数赋值。这使得`out`参数常用于返回多个值的情况。 4. `params`关键字: C#中的`params`关键字...