1
resposta

Quando usar this e quando usar ref ?

Estava acompanhando um curso, mas especificamente quando falava em métodos de extensão, e vi a necessidade de estar passando argumentos com ref.

Porém, utilizando this também funciona.

Quando devo utilizar cada um e quais as diferenças entre eles?

1 resposta

Olá Mike

Em extensões, quando você usa this no primeiro parametro, você está usando o valor retornado do método que ele está fazendo a extensão. Você tem um método que retorna um inteiro:

int total = metodoSoma(2,3);

Você cria uma extensão que dobra esse valor: public static int DobraValor(this int value);

int total = metodoSoma(2,3).DobraValor();

O resultado seria 5 da soma + o valor dobrado e seu resultado seria 10.

Segue exemplo completo:

class Example
    {
        public static void Main()
        {
            int total = Soma(2, 3).DobraValor();
            Console.WriteLine(total);
            Console.ReadKey();
        }
        public static int Soma(int a,int b)
        {
            return a + b;
        }       
    }
    static class DobraValorExtension
    {
        public static int DobraValor(this int value)
        {
            return value * 2;
        }
    }

Quanto ao ref no parametro, ele permite que se o valor do parâmetro for modificado dentro do metodo ele possa ser retornado. O parâmetro que usar ref precisa ser inicializado.

Exemplo:

int a=0;
Change(ref a);
Console.WriteLine(a); ==> valor igual a 10
// Veja que não peguei o valor pelo return do método e sim pelo próprio parâmetro.
private static void Change(ref int a)
        {
            a = 10;
        }

Espero ter ajudado.