方法参数:值参数、引用参数、输出参数
2008-05-26 12:23
204 查看
本文引用于:/article/4718269.html
一、參數的使用方法:
1、值參數(Value Parameter )
格式:方法名稱(參數類型 參數名稱[,參數類型 參數名稱])
2、引用參數(Reference Parameter )
格式:方法名稱(ref 參數類型 參數名稱[,ref 參數類型 參數名稱])
3、輸出參數(Out Parameter)
格式:方法名稱(out 參數類型 參數名稱[,out 參數類型 參數名稱])
二、值參數與引用參數及輸出參數的區別:
2.1 值參數中實參的值不隨形參值變更而變更;
形參與實參值互不影響,實參傳遞給形參時,堆棧中就為其分配另外一部分空間。這樣,兩個參數變更時而互不影響。
2.2 引用參數及輸出參數中實參的值會隨形參值變更而變更
(形參:在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元.只有在发生函数调用时,函数中形参才被分配内存单元.在调用结束后,形参所占的内存单元也被释放。调用时将实参的值赋绐形参);
引用參數與輸出參數中,實參在堆棧中分配空間。當實參傳遞給形參時,會將地址傳遞給形參,即傳送的是指針,這樣形參變更時,實參也會隨著變更。
三、引用參數與輸出參數區別:
3.1 使用ref與out參數時,方法中參數及調用參數都需要加Ref或out關鍵字
3.2 使用ref參數與out參數得到的結果是一樣的,區別是:ref在調用前需給調用方法中的參數賦初值。out在調用前不需給調用方法中的參數賦初值,參數在實際方法體中初始化。
四:查看代碼
如:下面代碼中各個參數的結果:
using System;
class mahod
{
public static void ValueMethod(int i)
{
i++;
}
public static void ReferenceMehtod(ref int i)
{
i++;
}
public static void OutMethod(out int j)
{
j=0;
j++;
}
static void Main()
{
int i=0;
ValueMethod(i);
Console.WriteLine("i="+i);
int j=0;
ReferenceMehtod(ref j);
Console.WriteLine("j="+j);
int k;
OutMethod(out k);
Console.WriteLine("k="+k);
Console.ReadLine();
}
}
有时,我们需要改变原来变量中的值,这时,我们可以向方法传递变量的引用,而不是变量的值.引用是一个变量,他可以访问原来变量的值,修改引用将修改原来变量的值.变量的值存储在内存中,可以创建一个引用,他指向变量在内存中的位置.当引用被修改时,修改的是内存中的值,因此变量的值可以将被修改.当我们调用一个含有引用参数的方法时,方法中的参数将指向被传递给方法的相应变量,因此,我们会明白,为什么当修改参数变量的修改也将导致原来变量的值.
private int r1(int i)
{
i = i * i;
return i;
}
private int r2(ref int i) //引用参数
{
i = i * i;
return i;
}
//调用:
int m = 3; //必须赋值
int n = 0; //可以不赋值 int n;
n = r1(m); //m=3 n=9
n = r2(ref m); //m=9(被修改了) n=9
//ref参数之前必须先赋值
//out:
private void r1(int i,out int j,out int k) //private void r1(ref int i,out int j,out int k)
{
j=i*10;
k = j * 20;
}
//调用:
int x = 1;//必须赋值
int y = 0;//or:int y; 可以不赋值
int z = 0;//or:int z;可以不赋值
r1(x, out y, out z); //x=1 y=10 z=200
//ref和out的区别:
1、ref和out似乎可以实现相同的功能.因为都可以改变传递到方法中的变量的值.
但是,二者本质本质的区别就是,ref是传入值,out是传出值.
2、ref参数之前必须先赋值
3、在含有out关键字的方法中,out变量必须由该方法参数中非out(可以是ref)变量赋值或者由全局变量赋值。
4、out的宗旨是保证每一个传出变量都必须被赋值。
5、out参数在调用方法前可以不初始化变量。
6、而ref参数,在传递给方法时,就已经是含有值的了,所以ref侧重修改.out侧重输出。
一、參數的使用方法:
1、值參數(Value Parameter )
格式:方法名稱(參數類型 參數名稱[,參數類型 參數名稱])
2、引用參數(Reference Parameter )
格式:方法名稱(ref 參數類型 參數名稱[,ref 參數類型 參數名稱])
3、輸出參數(Out Parameter)
格式:方法名稱(out 參數類型 參數名稱[,out 參數類型 參數名稱])
二、值參數與引用參數及輸出參數的區別:
2.1 值參數中實參的值不隨形參值變更而變更;
形參與實參值互不影響,實參傳遞給形參時,堆棧中就為其分配另外一部分空間。這樣,兩個參數變更時而互不影響。
2.2 引用參數及輸出參數中實參的值會隨形參值變更而變更
(形參:在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元.只有在发生函数调用时,函数中形参才被分配内存单元.在调用结束后,形参所占的内存单元也被释放。调用时将实参的值赋绐形参);
引用參數與輸出參數中,實參在堆棧中分配空間。當實參傳遞給形參時,會將地址傳遞給形參,即傳送的是指針,這樣形參變更時,實參也會隨著變更。
三、引用參數與輸出參數區別:
3.1 使用ref與out參數時,方法中參數及調用參數都需要加Ref或out關鍵字
3.2 使用ref參數與out參數得到的結果是一樣的,區別是:ref在調用前需給調用方法中的參數賦初值。out在調用前不需給調用方法中的參數賦初值,參數在實際方法體中初始化。
四:查看代碼
如:下面代碼中各個參數的結果:
using System;
class mahod
{
public static void ValueMethod(int i)
{
i++;
}
public static void ReferenceMehtod(ref int i)
{
i++;
}
public static void OutMethod(out int j)
{
j=0;
j++;
}
static void Main()
{
int i=0;
ValueMethod(i);
Console.WriteLine("i="+i);
int j=0;
ReferenceMehtod(ref j);
Console.WriteLine("j="+j);
int k;
OutMethod(out k);
Console.WriteLine("k="+k);
Console.ReadLine();
}
}
有时,我们需要改变原来变量中的值,这时,我们可以向方法传递变量的引用,而不是变量的值.引用是一个变量,他可以访问原来变量的值,修改引用将修改原来变量的值.变量的值存储在内存中,可以创建一个引用,他指向变量在内存中的位置.当引用被修改时,修改的是内存中的值,因此变量的值可以将被修改.当我们调用一个含有引用参数的方法时,方法中的参数将指向被传递给方法的相应变量,因此,我们会明白,为什么当修改参数变量的修改也将导致原来变量的值.
private int r1(int i)
{
i = i * i;
return i;
}
private int r2(ref int i) //引用参数
{
i = i * i;
return i;
}
//调用:
int m = 3; //必须赋值
int n = 0; //可以不赋值 int n;
n = r1(m); //m=3 n=9
n = r2(ref m); //m=9(被修改了) n=9
//ref参数之前必须先赋值
//out:
private void r1(int i,out int j,out int k) //private void r1(ref int i,out int j,out int k)
{
j=i*10;
k = j * 20;
}
//调用:
int x = 1;//必须赋值
int y = 0;//or:int y; 可以不赋值
int z = 0;//or:int z;可以不赋值
r1(x, out y, out z); //x=1 y=10 z=200
//ref和out的区别:
1、ref和out似乎可以实现相同的功能.因为都可以改变传递到方法中的变量的值.
但是,二者本质本质的区别就是,ref是传入值,out是传出值.
2、ref参数之前必须先赋值
3、在含有out关键字的方法中,out变量必须由该方法参数中非out(可以是ref)变量赋值或者由全局变量赋值。
4、out的宗旨是保证每一个传出变量都必须被赋值。
5、out参数在调用方法前可以不初始化变量。
6、而ref参数,在传递给方法时,就已经是含有值的了,所以ref侧重修改.out侧重输出。
相关文章推荐
- C#基础学习--方法参数的种类,值参数,引用参数(ref),输出参数(out),数组参数(params)
- C#方法参数--值参数,引用参数,输出参数
- C#方法的六种参数,值参数、引用参数、输出参数、参数数组、命名参数、可选参数
- 方法参数:值参数、引用参数、输出参数 -- ref out
- 方法参数:值参数、引用参数、输出参数 -- ref out
- ref和out,以及一般方法的引用参数和值参数寻解
- 巧妙理解方法的值参数与引用参数
- 傻瓜教你学习值参数,引用参数(ref)以及输出参数(out)
- Animator引用其中参数和状态的两种方法
- 在动态引用DLL-A中,当参数是个实体,而实体的属性在另一个DLL-B中。。我们需要得到A这个实体并将其赋值,并将赋值的实体传人DLL-A的方法中。
- 利用反射技术动态执行方法时如何取引用类参数的值
- 执行动态 sql 并为 输出参数赋值、sp_executesql 使用方法
- 探究java方法参数传递——引用传递?值传递!
- C# 值类型和引用类型 以及作为方法参数的区别
- 值类型与引用类型作为参数输出的效果
- C#形参,实参,值传递参数,引用传递参数,输出参数,参数数组的学习(一)
- Java方法参数引用
- C#形参,实参,值传递参数,引用传递参数,输出参数,参数数组的学习
- 方法参数是基本类型和引用类型的区别
- java 引用类型作为方法参数使用问题