Recomendado, 2020

Escolha Do Editor

Diferença entre ref e out em c #

"Ref" e "Out" são os modificadores de parâmetro usados ​​em C #. Usando ref e out, você pode passar qualquer tipo de valor por sua referência a qualquer método. A razão de passar qualquer tipo de valor por sua referência introduz a diferença principal entre a palavra-chave ref e out. A palavra-chave ref permite que o método chamado altere o conteúdo do argumento passado para ele com a palavra-chave ref. A palavra - chave out permite que o método chamado retorne mais de um valor em uma única chamada. Vamos estudar a diferença entre ref e out juntamente com um gráfico de comparação.

Gráfico de comparação

Base para ComparaçãoRefFora
BasicPermite a alteração no valor do argumento procedida com a palavra-chave ref.Ele permite que um método retorne os valores precedidos por uma palavra-chave out.
InicializaçãoO parâmetro ref deve ser inicializado antes da chamada do método.O parâmetro out deve ser inicializado dentro do método chamado antes de ser finalizado.
DeclaraçãoO parâmetro a ser alterado por um método é declarado como ref durante a declaração do método e a chamada do método.O parâmetro a ser retornado deve ser declarado como ref durante a declaração do método e a chamada do método.

Definição de palavra-chave de referência

O "ref" é um modificador de parâmetro usado quando há necessidade de chamar um método com chamada por referência. Quando queremos que as alterações feitas nos argumentos dentro de um método chamado devam refletir no valor original dessa variável, o modificador de parâmetro ref é usado. O tipo de valor que queremos declarar como um ref é precedido pela palavra-chave “ref” durante a declaração do método e a chamada do método. Mais de um parâmetro pode ser declarado como um "ref" ao chamar e declarar um método.

 usando o sistema; classe DemoRef {public void Square (ref s int) {s = s * s; }} class Ref_main {estático void Main () {DemoRef ob = novo DemoRef (); int a = 10; Console.WriteLine ("uma chamada de método anterior:" + a); ob. Square (ref a); // Usei a palavra-chave ref Console.WriteLine ("a after call:" + a); }} // saída de uma chamada de método anterior: 10 a após chamada de método: 100 

No código acima, a variável 'a' é passada como um argumento para o método Square (ref a) junto com o modificador de parâmetro ref anexado a ele. Isso significa o que quer que mude o método que o Square (ref a) executará na variável 'a' dentro dele refletirá no valor original do 'a', fora do método também.

Existem alguns pontos importantes que devem ser lembrados ao lidar com o modificador de parâmetro “ref”.

  • O argumento que você está passando pelo ref para um método deve ser inicializado antes da chamada do método.
  • O método não deve atribuir o valor inicial ao argumento ref.
  • Você também pode usar ref junto com a variável de referência também.

Definição de palavra-chave

Cada vez que você chama um método, ele retornaria apenas um único valor. Se você quiser que um método retorne mais de um valor em uma chamada, a palavra-chave "out" deve ser usada junto com os parâmetros que você deseja retornar quando o método for finalizado. Às vezes é o caso que quando não queremos passar nada ao método, mas queremos que o método retorne algo, usamos parâmetros com uma palavra-chave out. Vamos entender isso com um exemplo.

 usando o sistema; class DemoOut {public int Decompor (double x, out doublefraction) {int whole_num; whole_num = (int) x; fração = x - núm_o inteiro; return whole_num; }} class Out_maint {estático void Main () {DemoOut ob = novo DemoOut (); int i; dupla fratura; i = ob.Decompose (100.125, out frac); // usou palavra-chave Console.WriteLine ("Whole number part is" + i); Console.WriteLine ("parte fracionária é" + frac); }} // saída A parte inteira é 100 A parte fracionária é 0.125 

No código acima, dois valores estão sendo retornados pelo método Decompose (). Uma retorna pela palavra-chave “return”, ou seja, whole_num, e outra, retorna um parâmetro que é precedido pela palavra chave out, enquanto o método chama, ou seja, “frac”.

Os pontos importantes a serem lembrados sobre a palavra-chave out.

  • Ao contrário da palavra-chave ref, o parâmetro using out keyword não deve ser inicializado antes da chamada do método.
  • O método chamado irá atribuir um valor ao parâmetro com uma palavra-chave out, pois é considerado como não atribuído dentro do método chamado, ou seja, assume-se que não possui valor inicial.
  • O método chamado deve atribuir um valor ao parâmetro out antes do término do método.
  • A palavra-chave out também é aplicável à variável de referência.

Diferenças-chave entre Ref e Out em C #

  1. Quando uma variável precedida pela palavra-chave ref é passada para qualquer método, as alterações feitas no método refletem-se em seu valor original. Quando uma variável passada para um método é precedida por out keyword, o método a retorna sem usar a palavra-chave return.
  2. O parâmetro ref deve ser inicializado antes de ser passado para um método. Por outro lado, o parâmetro out deve ser inicializado dentro do método para o qual é passado.
  3. Ao chamar, declarar ou definir um método, o parâmetro ref é explicitamente declarado como ref. Por outro lado, ao chamar, declarar ou definir um parâmetro out, o método out é explicitamente declarado como out.

Conclusão:

Sempre que a variável deve ser passada pela referência a um método, a palavra-chave ref e out pode ser usada. Considerando que, a razão de usar ambas as palavras-chave é diferente onde a palavra-chave ref pode ser usada para alterar o valor do argumento precedido por palavra-chave ref, passada para o método chamado e a palavra-chave out é usada para retornar o valor do argumento precedido pela palavra-chave out.

Top