首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对于C#中的引用类型变量,"ref“的用途是什么?

对于C#中的引用类型变量,"ref“的用途是什么?
EN

Stack Overflow用户
提问于 2009-06-07 11:11:26
回答 6查看 43.7K关注 0票数 200

我知道如果我传递一个值类型(intstruct等)作为参数(没有ref关键字),该变量的副本被传递给该方法,但是如果我使用ref关键字,则传递的是对该变量的引用,而不是新的引用。

但是,对于引用类型,即使没有ref关键字,也会将引用传递给方法,而不是复制。那么,ref关键字与引用类型有什么关系呢?

举个例子:

代码语言:javascript
复制
var x = new Foo();

以下内容之间有什么不同?

代码语言:javascript
复制
void Bar(Foo y) {
    y.Name = "2";
}

代码语言:javascript
复制
void Bar(ref Foo y) {
    y.Name = "2";
}
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-06-07 11:13:28

您可以使用y更改foo指向的内容

代码语言:javascript
复制
Foo foo = new Foo("1");

void Bar(ref Foo y)
{
    y = new Foo("2");
}

Bar(ref foo);
// foo.Name == "2"
票数 177
EN

Stack Overflow用户

发布于 2009-06-07 11:17:31

当使用ref关键字传递引用类型时,将按引用传递引用,并且所调用的方法可以为参数分配新值。该更改将传播到调用作用域。如果没有ref,引用是通过值传递的,这种情况不会发生。

C#也有'out‘关键字,它与ref非常相似,除了使用'ref’时,参数必须在调用方法之前初始化,而使用'out‘时,必须在接收方法中赋值。

票数 10
EN

Stack Overflow用户

发布于 2009-06-07 11:18:28

另一堆代码

代码语言:javascript
复制
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;
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/961717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档