Palavras-chave ref e out em C #

ref

ref: MSDN é definido como: "A palavra-chave ref indica um valor que é passado por referência." é para passar parâmetros por referência. ref também é uma abreviatura de Referência.

Não use ref

using System;

namespace Test_Code
{
   class A
    {
       public void Method( int a)
       {
            a += 1;
       }

        public static void Main()
        {
            int c = 10;
            A B = new A();
            B.Method(c);
            Console.WriteLine(c);
        }
    }
}
//输出10

Use palavras-chave ref

using System;

namespace Test_Code
{
    class A
    {
        public void Method(ref int a)
        {
            a += 1;
        }

        public static void Main()
        {
            int c = 10;
            A B = new A();
            B.Method(ref c);
            Console.WriteLine(c);
        }
    }
}
//输出11

总结

Quando a palavra-chave ref não é utilizada, o valor recebido pela função é 10, e então no método Método (int a), após o acúmulo da variável local a, ela é destruída após a execução do método. O valor de c ainda é 10.
Usando a palavra-chave ref, a função Método (ref int a) recebeu o valor de c é o endereço da função executada a + = 66; neste caso, corresponde a c + = 66; modifique diretamente o valor do endereço c.
Portanto, refira-se por um método de passar um parâmetro de tipo de valor, uma operação direta variável da mesma chave.

Fora

Definição de out: como um modificador de parâmetro, que permite que você passe um argumento para um método por referência em vez de por valor. "Out" como um modificador de parâmetro permite que você passe parâmetros para um método por referência em vez de por valor.
Em declarações de parâmetro de tipo genérico para interfaces e delegados, que especifica que um parâmetro de tipo é covariante. No contexto de hoje, discutiremos apenas a primeira definição de passagem de parâmetros como referência.

int number;
 
Method(number);
 
void Method(int a)
{
    a = 66;
}
 
Console.WriteLine(number);
//输出:0
 
 
 
int number;
 
Method(out number);
 
void Method(out int a)
{
    a = 66;
}
 
Console.WriteLine(number);
//输出:66

总结

Julgando pelo desempenho do uso de out acima, out e ref podem realmente permitir que os parâmetros sejam passados ​​por referência.

A diferença entre ref e out:

Quando você usa ref para passar parâmetros, o parâmetro ref modificado deve ter um valor, mas out pode usar uma variável não atribuída como um parâmetro para passar.

using System;

namespace Test_Code
{
    class RefAndOut
    {
        public static void OutDouble(out int out_int)
        {
            out_int = 2;
            Console.WriteLine(out_int);
        }
        public static void RefDouble(ref int ref_int)
        {
            ref_int *= 2;
            Console.WriteLine(ref_int);
            Console.ReadKey();
        }
        public static void NormalDouble(int IntPar)
        {
            IntPar = 1;
            IntPar *= 2;
            Console.WriteLine( IntPar);
            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            int out_int;
            int ref_int;
            int normalInt;
            OutDouble(out out_int);
            RefDouble(ref ref_int);//错误:使用了未赋值的变量refInt
            NormalDouble(normalInt);//错误:使用了未赋值的变量normalInt
        }
    }

}

Este código contém erros em dois lugares: isto é, quando ref é usado, e quando modificadores não são usados, um parâmetro com um valor deve ser passado. Então você vê, há quase apenas uma diferença entre ref e out, ou seja, out pode usar variáveis ​​não atribuídas.

Em conclusão:

A única diferença entre as palavras-chave "ref" e "out" é que a palavra-chave "out" não requer que o código de chamada inicialize o valor do parâmetro a ser passado. Então, quando a palavra-chave "ref" é usada? Quando você precisa garantir que o método de chamada inicializou os valores dos parâmetros, você deve usar a palavra-chave "ref". No exemplo acima, a capacidade de usar "out" é devido ao método sendo chamada Não depende do valor da variável que está sendo passada.

Acho que você gosta

Origin blog.csdn.net/qq_40513792/article/details/115168287
Recomendado
Clasificación