c#.net中参数修饰符ref,out ,params得区别?

有知道的吗?说的明白些?最好有个例子
谢谢了!

params 关键字可以指定在参数数目可变处采用参数的方法参数。

在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。

示例
// cs_params.cs
using System;
public class MyClass
{

public static void UseParams(params int[] list)
{
for ( int i = 0 ; i < list.Length ; i++ )
Console.WriteLine(list[i]);
Console.WriteLine();
}

public static void UseParams2(params object[] list)
{
for ( int i = 0 ; i < list.Length ; i++ )
Console.WriteLine(list[i]);
Console.WriteLine();
}

public static void Main()
{
UseParams(1, 2, 3);
UseParams2(1, 'a', "test");

int[] myarray = new int[3] {10,11,12};
UseParams(myarray);
}
}
输出
1
2
3

1
a
test

10
11
12

===============================================
方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。
若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。
不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。
属性不是变量,不能作为 out 参数传递。
如果两个方法的声明仅在 out 的使用方面不同,则会发生重载。不过,无法定义仅在 ref 和 out 方面不同的重载。例如,以下重载声明是有效的:
class MyClass
{
public void MyMethod(int i) {i = 10;}
public void MyMethod(out int i) {i = 10;}
}
而以下重载声明是无效的:
class MyClass
{
public void MyMethod(out int i) {i = 10;}
public void MyMethod(ref int i) {i = 10;}
}
有关传递数组的信息,请参见使用 ref 和 out 传递数组。
示例
// cs_out.cs
using System;
public class MyClass
{
public static int TestOut(out char i)
{
i = 'b';
return -1;
}

public static void Main()
{
char i; // variable need not be initialized
Console.WriteLine(TestOut(out i));
Console.WriteLine(i);
}
}
输出
-1
b

========================================
方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
若要使用 ref 参数,必须将参数作为 ref 参数显式传递到方法。ref 参数的值被传递到 ref 参数。
传递到 ref 参数的参数必须最先初始化。将此方法与 out 参数相比,后者的参数在传递到 out 参数之前不必显式初始化。
属性不是变量,不能作为 ref 参数传递。
如果两种方法的声明仅在它们对 ref 的使用方面不同,则将出现重载。但是,无法定义仅在 ref 和 out 方面不同的重载。例如,以下重载声明是有效的:
class MyClass
{
public void MyMethod(int i) {i = 10;}
public void MyMethod(ref int i) {i = 10;}
}
但以下重载声明是无效的:
class MyClass
{
public void MyMethod(out int i) {i = 10;}
public void MyMethod(ref int i) {i = 10;}
}
有关传递数组的信息,请参见使用 ref 和 out 传递数组。
示例
// cs_ref.cs
using System;
public class MyClass
{
public static void TestRef(ref char i)
{
// The value of i will be changed in the calling method
i = 'b';
}

public static void TestNoRef(char i)
{
// The value of i will be unchanged in the calling method
i = 'c';
}

// This method passes a variable as a ref parameter; the value of the
// variable is changed after control passes back to this method.
// The same variable is passed as a value parameter; the value of the
// variable is unchanged after control is passed back to this method.
public static void Main()
{

char i = 'a'; // variable must be initialized
TestRef(ref i); // the arg must be passed as ref
Console.WriteLine(i);
TestNoRef(i);
Console.WriteLine(i);
}
}
输出
b
b

参考资料:MSDN

温馨提示:内容为网友见解,仅供参考
无其他回答

c#.net中参数修饰符ref,out ,params得区别?
传递到 ref 参数的参数必须最先初始化。将此方法与 out 参数相比,后者的参数在传递到 out 参数之前不必显式初始化。

ref和out的区别
其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次。这个就是两个的区别,或者说就像有的网友说的,ref是有进有出,out是只出不进。ref和out的区别在C# 中,既可以通过值也可以通过引用传递参...

定义有参函数时rel,ref,out三个修饰符的区别
它们的区别在于当使用ref修饰符时要求在传递参数前对被传递的参数进行初始化,而out修饰符不需要。所以您可以将一个由ref修饰的变量传入一个函数而不对其进行显式的赋值,但是一个由out修饰符修饰的函数参数必须在函数返回前被明确赋值。对于rel,C#中似乎没有这个修饰符。希望这些信息对您有帮助。

c#方法的参数类型主要有哪三种类型?
"); <\/SPAN>效果: 注意:ref和out的区别:传递到ref参数的参数必须最先初始化,而out的参数在传递之前不必初始化.

c#中的out关键字使用的优势在哪里?我如果不使用,做普通的赋值操作。有...
2、在函数内部,引用参数(ref)被视为初始已赋值,输出参数(out)被视为初始未赋值。3、默认地,C#中的所有参数都是值传递。只有在参数的修饰符中明确包含out或ref,才是引用传递。但是需要知道的是,当参数的类型是引用类型时,你传递的是一个对象的引用而不是实际的对象。

C#中类的方法怎么用的?
C#中方法的参数有四种类型:1. 值参数类型 (不加任何修饰符,是默认的类型)2. 引用型参数 (以ref 修饰符声明)3. 输出型参数 (以out 修饰符声明)4. 数组型参数 (以params 修饰符声明)=== 1.值传递: 值类型是方法默认的参数类型,采用的是值拷贝的方式。也就是说,如果使用的是值类型...

2021春招C#.NET笔试题基础篇 (原题+详解答案)
10. 参数传递ref与out的区别?ref参数必须初始化,out参数在进入函数前清空,必须在函数内部初始化;ref参数可以在方法内外传递,out参数只能传递给方法。11. 装箱和拆箱的概念?装箱将值类型转换为引用类型,拆箱将引用类型转换为值类型。装箱涉及对象实例分配,拆箱需要类型转换。12. 多态中overload与...

Params是什么含义
首先,params后面不允许有任何其他参数,且在整个声明中只能出现一次。其次,关于参数数组,需要注意以下几点:参数数组必须是一维的,并且应放在形参列表的最后;params修饰符不能与ref或out修饰符一起使用;实参可以是数组名或多个同类元素的变量;当实参是数组时,会按引用传递,而变量或表达式则按值传递...

C# ref参数问题
ref的作用就是这个。它将变量本身而不是副本传给方法,所以对参数的修改原来变量的值。int a = 0;Console.WriteLine(a.ToString()); \/\/输出是0 public void ModifyVaule(ref int a){ a = 1;} Console.WriteLine(a.ToString()); \/\/ 输出是1。此外,out修饰符也起到这个作用,二者的区别就是...

params 是什么意思,c#里
params关键字可以指定在参数数目可变处采用参数的方法参数。在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。每个C#函数都允许有个参数带params关键字,在调用的时候可以不给他传值,也可以给他传值,还可以给他传多个值。

相似回答