Olá pessoal,
Olhando um código num projeto, encontrei dois métodos que utilizam formas diferentes de passar um valor por referência. Em um deles encontrei o uso de "out" e no outro o uso de "ref".
Quando estamos desenvolvendo um método e precisamos retornar dois ou mais valores, precisamos utilizar a passagem de valor por referência, daí o nosso método altera o valor que foi passado e com isto permita o retorno deles.
Lembre-se que este tipo de implementação - passagem de valor por referência - deve ser usado com cuidado, pois se você tiver vários valores que devem ser retornados em um método, o melhor seria a criação de uma Struct para retorná-los.
Então, voltando ao assunto do out e ref, vou mostrar trechos de código com a implementação de cada um:
Utilizando o out
class OutExample
{
// Separa uma string, que contém o primeiro e o último nome, em dois parâmetros que são passados por referência e que vão conter, respectivamente, o primeiro e o último nome.
static void SplitName(string fullName, out string firstName, out string lastName)
{
int spaceIndex = fullName.IndexOf(' ');
firstName = fullName.Substring(0, spaceIndex).Trim();
lastName = fullName.Substring(spaceIndex).Trim();
}
static void Main()
{
string fullName = "Yuan Sha";
string firstName;
string lastName;
// note que o firstName e o lastName não foram iniciados ainda, por que o parâmetro do tipo out nos garante isto.
SplitName(fullName, out firstName, out lastName);
System.Console.WriteLine("First Name '{0}'. Last Name '{1}'", firstName, lastName);
}
}E agora a implementação usando o parâmetro do tipo ref
class RefExample
{
static object FindNext(object value, object[] data, ref int index)
{
// veja que é possível acessar o index, pois ele foi instanciado
while (index < data.Length)
{
if (data[index].Equals(value))
{
return data[index];
}
index += 1;
}
return null;
}
static void Main()
{
object[] data = new object[] {1,2,3,4,2,3,4,5,3};
int index = 0; // deve ser inicializado antes de ser passado como parâmetro
while (FindNext(3, data, ref index) != null)
{
System.Console.WriteLine("Found at index {0}", index);
index += 1;
}
System.Console.WriteLine("Done Find");
}
}Veja que a diferença entre os dois tipos de parâmetros são bem sutis. Na passagem utilizando out, não precisamos inicializar a variável que vamos passar, diferentemente quando implementamos o ref, onde somos obrigados a instancializá-la antes de passar o parâmetro.
Ambas fazem o mesmo papel, mas de acordo com as boas práticas de programação, o recomendado é a utilização do parâmetro por referência do tipo out.
Bom pessoal, vou ficando por aqui.
Até a próxima.

![]() |
CodigoFonte.net » CodigoFonte.eti.br » Compre De Tudo » Meu Mural » Competiva - Criação de Sites » Todos os Direitos Reservados © 2002/2010 |
Procurando Notebooks, Câmeras Digitais, iPhones?