1.out参数的用法。
usingSystem;
classTestOut

...{
staticpublicvoidFillArray(outint[]myArray)

...{
//初始化数组(必须):

myArray=newint[5]...{1,2,3,4,5};
}

staticpublicvoidMain()

...{
int[]myArray;//初始化数组(不是必须的!)

//传递数组给(使用out方式的)调用方:
FillArray(outmyArray);

//显示数组元素
Console.WriteLine("数组元素是:");
for(inti=0;i<myArray.Length;i++)
Console.WriteLine(myArray[i]);
}
}
2.ref参数的基本用法,相当于c里面的指针。
usingSystem;
classTestRef

...{
publicstaticvoidFillArray(refint[]arr)

...{
//根据需要创建一新的数组(不是必须的)
if(arr==null)
arr=newint[10];
//否则填充数组,就可以了
arr[0]=123;
arr[4]=1024;
}

staticpublicvoidMain()

...{
//初始化数组:

int[]myArray=...{1,2,3,4,5};

//使用ref传递数组:
FillArray(refmyArray);

//显示更新后的数组元素:
Console.WriteLine("数组元素是:");
for(inti=0;i<myArray.Length;i++)
Console.WriteLine(myArray[i]);
}
}
3.有ref与无ref的比较。
usingSystem;
publicclassMyClass

...{
publicstaticvoidTestRef(refchari)

...{
//Thevalueofiwillbechangedinthecallingmethod
i='b';
}

publicstaticvoidTestNoRef(chari)

...{
//Thevalueofiwillbeunchangedinthecallingmethod
i='c';
}



//Thismethodpassesavariableasarefparameter;thevalueofthe
//variableischangedaftercontrolpassesbacktothismethod.
//Thesamevariableispassedasavalueparameter;thevalueofthe
//variableisunchangedaftercontrolispassedbacktothismethod.
publicstaticvoidMain()

...{
chari='a';//variablemustbeinitialized
TestRef(refi);//theargmustbepassedasref
Console.WriteLine(i);
i='a';
TestNoRef(i);
Console.WriteLine(i);

}
}
4.此处应用了类,注意类是引用类型,直接进行引用,除非在函数内生成新的类。
usingSystem;
//----------------------------------------
//MyClassdefinition
publicclassMyClass

...{
publicintValue;



//----------------------------------------
//Testermethods
publicstaticvoidTestRef(refMyClassm)

...{
m.Value=10;
}

publicstaticvoidTestNoRef(MyClassm)

...{
m.Value=20;
}

publicstaticvoidTestCreateRef(refMyClassm)

...{
m=newMyClass();
m.Value=100;
}

publicstaticvoidTestCreateNoRef(MyClassm)

...{
m=newMyClass();
m.Value=200;
}

publicstaticvoidMain()

...{
MyClassm=newMyClass();
m.Value=1;

TestRef(refm);
Console.WriteLine(m.Value);

TestNoRef(m);
Console.WriteLine(m.Value);

TestCreateRef(refm);
Console.WriteLine(m.Value);

TestCreateNoRef(m);
Console.WriteLine(m.Value);
}
}
5.ref,out,与无参参数的比较。
usingSystem;
classTestApp

...{
staticvoidoutTest(outintx,outinty)

...{//离开这个函数前,必须对x和y赋值,否则会报错。
//y=x;
//上面这行会报错,因为使用了out后,x和y都清空了,需要重新赋值,即使调用函数前赋过值也不行
x=1;
y=2;
}
staticvoidrefTest(refintx,refinty)

...{
x=1;
y=x;
}


staticvoidnoRefTest(intx,inty)

...{
x=8;
y=x;
}



publicstaticvoidMain()

...{
//outtest
inta,b;
//out使用前,变量可以不赋值
outTest(outa,outb);
Console.WriteLine("a={0};b={1}",a,b);
intc=11,d=22;
outTest(outc,outd);
Console.WriteLine("c={0};d={1}",c,d);

//reftest
//intm,n;
//refTest(refm,refn);
//上面这行会出错,ref使用前,变量必须赋值

into=11,p=22;
refTest(refo,refp);
Console.WriteLine("o={0};p={1}",o,p);

intli=99,zong=89;
noRefTest(li,zong);
Console.WriteLine("{0},{1}",li,zong);



}
}
分享到:
相关推荐
在C#编程语言中,`ref`和`out`是两个关键字,它们都用于方法参数传递,但有各自独特的用途和规则。理解并熟练运用`ref`和`out`是提高C#编程效率的关键。 首先,`ref`关键字用于当需要在方法内部修改传入的参数值,...
下面给出一个具体的示例来说明`ref`、`out`和`params`的使用方法: ```csharp public class A { public void Function(ref string pcRef) { // 修改pcRef的值 pcRef = "这是一个string"; } } public class B ...
综上所述,`ref`和`out`关键字在C#中的使用提供了灵活的方式来处理参数传递,特别是在需要直接操作外部变量或返回多个值的情况下。正确理解和应用这些关键字,能够极大地提高程序的效率和可维护性。
本文将深入解析C#中涉及的几种关键参数传递机制:值类型的基本传递、`ref`关键字以及`out`关键字,并通过具体示例来说明这些传递方式的区别及应用场景。 ### 值类型的参数传递 在C#中,当我们将一个值类型(如基本...
C#中out参数、ref参数与值参数的用法及区别 C# 中的参数类型有四种:值参数、ref 参数、out 参数和 params 参数。今天,我们将详细介绍 C# 中的 out 参数、ref 参数和值参数的用法及区别。 值参数 -------- 在...
在C#编程语言中,`ref`和`out`关键字是两种特殊的参数传递方式,它们允许函数修改调用者提供的变量的值。虽然这两种关键字在功能上有些相似,但它们的使用场景和语法规则有所不同。本文将深入探讨`ref`和`out`的用法...
本文将详细介绍C#中的三种参数传递方式:`in`、`ref` 和 `out`。 #### in 关键字(值传递) `in` 关键字用于声明只读的方法参数。当使用 `in` 传递参数时,实际上是传递了一个只读的副本,这意味着在方法内部无法...
例如,在一个方法中,我们可以使用ref关键字来传递多个参数,然后在方法中对这些参数进行修改,最后,回到调用方法后,输出这些参数的值,我们可以发现这些参数的值已经被修改。 在我们看一个简单的例子中,可以...
在C#编程中,`ref`和`out`关键字是用来处理方法参数的特殊方式,它们允许函数修改调用者提供的变量。虽然这两种关键字在某些方面很相似,但也存在关键的区别。 `ref`关键字: 1. `ref`参数要求在传递到方法之前必须...
在C#语言中,`ref`和`out`是两个非常重要的关键字,它们主要用于处理函数参数的传递方式。通常情况下,在C#中调用方法时,参数是以值传递的方式进行的,也就是说,方法内的参数改变不会影响到方法外的原始变量。然而...
在C#编程语言中,参数是函数或方法的一部分,用于传递数据给函数执行特定操作。本文将详细讨论四种主要的参数类型:值类型参数、引用类型参数、输出参数和数组型参数。 1. 值类型参数: 值类型参数是最常见的参数...
本文实例讲述了C#中Out与Ref的区别,可以加深C#程序设计人员对Out和Ref用法的理解,具体分析如下: 一、区别分析: Out和Ref作为参数传递到方法体中,所传递的都是引用地址,两者在操作上本身没有区别。 但Out传递到...
在本文中,我们将深入探讨如何利用反射调用包含`ref`和`out`参数的方法。 首先,理解`ref`和`out`关键字在C#中的作用至关重要。`ref`和`out`都是用来传递参数的方式,它们使得方法能够修改传递进来的变量的值。`ref...
3. 返回值:`Ref`参数通常用于已经知道初始值并且需要在方法中改变的场景,而`Out`参数则用于方法可能不使用调用者提供的初始值,而是提供一个新值的情况。 总结来说,`Ref`和`Out`参数都是为了在方法之间传递和...
C#方法中参数ref和out详解 C# 方法中参数类型有四种,分别是值参数、引用参数、输出参数和参数数组。本文将详细介绍 C# 方法中参数 ref 和 out 的相关资料,并对其进行详细的比较和对照。 一、值参数 在 C# 方法...
- **使用场景**:当需要在方法中修改原始变量的值,并希望这个改变在方法调用后仍然有效时,可以使用 `ref`。 - **语法**:在方法声明和调用时都需要使用 `ref` 关键字。 3. **out 关键字**: - **作用**:`out`...
* 一维数组:C#参数在基本类型前加ref或out,out表示有返回数据。例如调用C++的f(float[] a),在C#中,为f(ref a)。 * 数据结构:C++中的struct SAMPLE_DATA { byte SampleID[255]; float Value[6]; } 在C#中对应...
在C#中通过使用方法来获取返回值时,通常只能得到一个返回值。因此,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢? MSDN: ref 关键字使参数按引用传递。其效果是,当控制权...
`out`参数主要用于从方法中返回多个值,而不需要创建复杂的类结构或使用数组。例如: ```csharp public void MathRoutines(double x, out double half, out double squared, out double cubed) { half = x / 2; ...