繁体   English   中英

ref修饰符包含的参数到底是什么?

[英]What exactly is parameter containing with ref modifier?

我想问一些关于ref修饰符的问题。

我所知道和了解的:使用使用ref修饰符的方法,将不会像按值传递那样复制数据,但是参数可以直接访问参数值。 基本上说,您在方法范围内所做的所有操作都将与在调用方范围内使用参数(传递的变量)进行操作时的行为相同。

我想问一下使用ref修饰符存储在参数中到底是什么:当我将参数传递给使用ref修饰符的方法时,参数将包含对参数值的引用吗? 或者是别的什么?

谢谢您的回答

当您具有带有ref属性的参数时,它将按引用而不是值传递参数。 这意味着不会创建变量的新副本,而是在函数中使用指向原始变量的指针。

public void Foo()
    {
        var x = 0;
        Bar(x); // x still equals 0
        Bar(ref x); // x now equals 1
    }

    public void Bar(ref int x)
    {
        x = 1;
    }

    public void Bar(int x)
    {
        x = 1;
    }

假设我们有这种方法:

public void DoSomething(int number)
{
    number = 20;
}

我们使用它:

var number = 10;
DoSomething(number);
Console.WriteLine("Our number is: {0}", number);

输出将是Our number is: 10 我们的人数没有变成20。

那是因为我们按值传递 ,所以在更改number之前,我们基本上是在复制number

但是,如果我们改为通过引用传递

public void DoSomething(ref int number)
{
    number = 20;
}

然后使用我们的方法:

var number = 10;
DoSomething(ref number);
Console.WriteLine("Our number is: {0}", number);

输出将变为Our number is: 20

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM