我知道如果我传递一个值类型(int
、struct
等)作为参数(没有ref
关键字),该变量的副本被传递给该方法,但是如果我使用ref
关键字,则传递的是对该变量的引用,而不是新的引用。
但是,对于引用类型,即使没有ref
关键字,也会将引用传递给方法,而不是复制。那么,ref
关键字与引用类型有什么关系呢?
举个例子:
var x = new Foo();
以下内容之间有什么不同?
void Bar(Foo y) {
y.Name = "2";
}
和
void Bar(ref Foo y) {
y.Name = "2";
}
发布于 2009-06-07 11:13:28
您可以使用y
更改foo
指向的内容
Foo foo = new Foo("1");
void Bar(ref Foo y)
{
y = new Foo("2");
}
Bar(ref foo);
// foo.Name == "2"
发布于 2009-06-07 11:17:31
当使用ref关键字传递引用类型时,将按引用传递引用,并且所调用的方法可以为参数分配新值。该更改将传播到调用作用域。如果没有ref,引用是通过值传递的,这种情况不会发生。
C#也有'out‘关键字,它与ref非常相似,除了使用'ref’时,参数必须在调用方法之前初始化,而使用'out‘时,必须在接收方法中赋值。
发布于 2009-06-07 11:18:28
另一堆代码
class O
{
public int prop = 0;
}
class Program
{
static void Main(string[] args)
{
O o1 = new O();
o1.prop = 1;
O o2 = new O();
o2.prop = 2;
o1modifier(o1);
o2modifier(ref o2);
Console.WriteLine("1 : " + o1.prop.ToString());
Console.WriteLine("2 : " + o2.prop.ToString());
Console.ReadLine();
}
static void o1modifier(O o)
{
o = new O();
o.prop = 3;
}
static void o2modifier(ref O o)
{
o = new O();
o.prop = 4;
}
}
https://stackoverflow.com/questions/961717
复制相似问题