C# 方法参数传递之值传递和引用传递
2011-08-15 17:34 DylanChan 阅读(738) 评论(1) 收藏 举报
1、大部分情况下,使用C#预定义的类型时,都是按照值传递使用的,比较复杂的情况是按照引用传递各种类型(值类型和引用类型),其实实质上的不同时对变量的操作方式上的不同
2、在c#内置基本类型当中,除了object和string外,都是值类型。同时,自己定义的类,也都是引用类型。因为自定义类全部继承自System.Object
3、在 C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员(方法、属性、索引器、运算符和构造函数)更改参数的值,并保持该更改。若要通过引用传递参数,请使用ref或out关键字。out与ref类似,唯一的不同是ref修饰变量时,变量需要初始化,而out修饰变量时则不需要。
即:值传递操作变量副本,引用传递操作变量本身
(1)值传递值类型:
class ValClass
{
static void AddValue(int x)
{
x++;
}
static void Main()
{
int i = 22;
AddValue(i);
Console.WriteLine(i);
//输出结果:22
}
}
(2)引用传递值类型:
class ReferenceClass
{
static void AddValue(ref int x)
{
x++;
}
static void Main()
{
int i = 22;
AddValue(ref i);
Console.WriteLine(i);
//输出结果:23
}
}
(3)值传递引用类型:
class ValClass
{
string str = "Definition Str In ValClass";
static void ChangeVal(string str)
{
str = str + "was changed!";
}
static void Main()
{
string str = "Definition Str In Main";
ChangeVal(str);//值传递
Console.WriteLine(str);
//输出结果:Definition Str In Main
}
}
(4)引用传递引用类型:
class ValClass
{
string str = "ValClass.str";
static void ChangeVal(ref string str)
{
str = "Str Was Changed In ValClass";
}
static void ChangeObj(ValClass vc)
{
vc.str = "Definition Str Again In ValClass";
}
static void Main()
{
string str = "Definition Str In Main";
ChangeVal(ref str);//引用传递
Console.WriteLine(str);
//输出:Str Was Changed In ValClass
Console.WriteLine("-------------------------");
ValClass vc = new ValClass();
Console.WriteLine(vc.str);
//输出:ValClass.str
ChangeObj(vc);//引用传递
Console.WriteLine(vc.str);
//输出:Definition Str Again In ValClass
}
}
浙公网安备 33010602011771号