Desenvolvimento - C#

Vídeo: Passagem de Parâmetros por Valor e por Referência com C#

Quando falamos em parâmetros em C# podemos destacar dois tipos: parâmetros por valor e parâmetros por referência, basicamente.

por Renato Guimarães



Este vídeo não faz parte do portal de vídeos .NET.

Baixe aqui o vídeo.

Quando falamos em parâmetros em C# podemos destacar dois tipos: parâmetros por valor e parâmetros por referência, basicamente. Como parâmetro por valor destacam-se os tipos primitivos(int, long, double, float, shot, byte etc), struct e enum; e parâmetros por referência destacam-se as classes, interfaces, String, entre outros.

Durante a execução de um método, pode-se dizer que os parâmetros do método, bem como suas variávies locais, são alocados numa área de memória chamada Stack. Por exemplo, se o método tiver uma variável do tipo int com valor 10, a mesma será armazenada na Stack. Agora, para uma variável do tipo Cliente, por exemplo, temos uma situação um pouco diferente. A variável em si é armazenada na Stack mas ela não manipula o objeto diretamente, e sim com um endereço de memória (referência) que aponta para o objeto que está na área de memória chamada Heap. Esta área de memória é controlada pelo Garbage Collector, que é responsável pela limpeza da mesma quando um objeto não é mais referenciado (ou seja, nenhuma variável aponta para ele).

O método que tem um parâmetro de um tipo por valor, ao ser executado, recebe uma cópia do argumento (valor do parâmetro passado na chamada do método) e não o endereço de memória da variável (isto é, quando você executa o método passando uma variável como argumento). Sendo assim, qualquer operação executada com o parâmetro não alterará o valor original da variável, somente o valor do parâmetro. Para que o método consiga altear o valor na mesma área de memória da variável de origem faz-se necessário que você utilize uma das palavras-chave do C#: ref ou out. O operador "ref" permite que um Value Type seja passado por referência. Para isso, o parâmetro do método deve ser declarado com ref e no momento da execução do método, o argumento deve ser passado com o operador ref. Além disso, o ref requer que a variável seja inicializada antes. O operador "out" segue a mesma idéia do "ref", porém não requer que a variável seja inicializada, porém obriga que o método execute alguma operação que atribua um valor a variável. Provavelmente, você sentirá necessidade de utilizar um dos operadores quando necessitar executar um método que retorne múltiplos valores.

O método que tem um parâmetro de um tipo por referência, ao ser executado, também recebe uma cópia do valor da variável mas, como já foi comentado, o tipo por referência não manipula o objeto diretamente, e sim um endereço. Como é passada uma cópia do endereço, qualquer alteração realizada pelo método afetará o mesmo objeto apontado pela variável que foi passada como parêmetro. Desta forma não é necessário utilizar os operadores ref e out quando estamos trabalhando com parâmetro do tipo reference type.

O objetivo deste vídeo é explicar através de exemplos a diferença entre parâmetros por valor e por referência. Desde já, agradeço seu interesse em assistir o vídeo e fique a vontade para mandar críticas e sugestões.

Baixe aqui o vídeo.

Este vídeo não faz parte do portal de vídeos .NET.

Renato Guimarães

Renato Guimarães - Bacharel em Sistemas de Informação e trabalha com tecnologia da informação há mais de 15 anos.