REF (referência de C#)

O ref palavra-chave faz com que os argumentos a serem passados por referência. O efeito é que qualquer alteração para o parâmetro no método será refletida nessa variável quando o controle passa de volta para o método de chamada.

ObservaçãoObservação

Não confunda o conceito de passagem por referência com o conceito de tipos de referência. Dois conceitos não são iguais. Um parâmetro do método pode ser modificado por ref independentemente se ela é um tipo de valor ou um tipo de referência. Não há nenhuma conversão boxing de um tipo de valor quando ele é passado por referência.

Para usar um ref parâmetro, a definição do método e o método de chamada deve usar explicitamente a ref palavra-chave. Por exemplo:

    class RefExample
    {
        static void Method(ref int i)
        {
            // Rest the mouse pointer over i to verify that it is an int.
            // The following statement would cause a compiler error if i
            // were boxed as an object.
            i = i + 44;
        }

        static void Main()
        {
            int val = 1;
            Method(ref val);
            Console.WriteLine(val);

            // Output: 45
        }
    }

Um argumento passado para um ref parâmetro deve ser inicializado pela primeira vez. Isso difere do out, cujos argumentos não precisam ser inicializadas antes que sejam passados explicitamente. Para obter mais informações, consulte check-out.

Embora o ref e out palavras-chave causam comportamento diferente do tempo de execução, eles não são considerados parte da assinatura do método em tempo de compilação. Portanto, métodos não podem ser sobrecarregados se a única diferença é que um método leva um ref argumento e a outra usa um out argumento. O código a seguir, por exemplo, não será compilado:

class CS0663_Example
{
    // Compiler error CS0663: "Cannot define overloaded 
    // methods that differ only on ref and out".
    public void SampleMethod(out int i) { }
    public void SampleMethod(ref int i) { }
}

Sobrecarga pode ser feito, no entanto, se um método terá uma ref ou out argumento e o outro não usa nenhuma como no exemplo a seguir:

    class RefOverloadExample
    {
        public void SampleMethod(int i) { }
        public void SampleMethod(ref int i) { }
    }

Propriedades não são variáveis. Eles são realmente métodos e portanto não pode ser passados como ref parâmetros.

Para obter informações sobre como passar matrizes, consulte Passando o uso de Arrays ref e out (guia de programação C#).

Exemplo

Tipos de valor de passar por referência, conforme demonstrado neste tópico, é útil, mas ref é também útil para passar os tipos de referência. Isso permite que os métodos chamados modificar o objeto ao qual se refere a referência porque a própria referência está sendo passada por referência. O exemplo a seguir mostra que quando uma referência digita é transmitido como um ref parâmetro, o próprio objeto pode ser alterado. Para obter mais informações, consulte Passando parâmetros deTipo (guia de programação de C#) a referência-.

class RefExample2
{
    static void Method(ref string s)
    {
        s = "changed";
    }
    static void Main()
    {
        string str = "original";
        Method(ref str);
        Console.WriteLine(str);
    }
}
// Output: changed

Especificação da linguagem C#

Para obter mais informações, consulte C# Language Specification A especificação de linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também

Referência

Passando parâmetros (guia de programação de C#)

Parâmetros do método (referência de C#)

C# Keywords

Conceitos

C# Programming Guide

Outros recursos

C# Reference