Arquivo da tag: Métodos

Definindo classes em C# – Parte 5

Passagem de parâmetros: Os modificadores in/out/ref

Ao criamos parâmetros em métodos na linguagem C#, por padrão estes parâmetros são passados por valor, ou seja, se os valores dos parâmetros forem alterados durante a execução do método, a mudança não será refletida na variável passada por parâmetro. Este comportamento é atribuído ao modificador de parâmetro in, e é implícito, não precisa ser informado.

public void Metodo1(int p1)
{
     p1 = 1000;
}

No exemplo acima, mesmo que o parâmetro p1 fosse alterado dentro do método seu valor externamente não seria modificado. Este comportamento pode ser alterado utilizado os moficadores ref e out.

O modificador ref

O parâmetro ref permite a passagem de valores por referência. Neste caso, os valores modificados dentro do método refletem para o bloco de código que fez a chamada. Na utilização, o operador ref é necessário tanto na declaração do parâmetro como também na chamada do método. E ainda o uso do ref requer que a variável a ser passada como parâmetro seja inicializada antes de passar sua referência. No exemplo abaixo, a variável valor é inicializada com o valor 1000, e depois é enviado por referência ao método.

double valor = 1000.00;
Metodo2(ref valor);

...

public void Metodo2(ref double p1)
{
     p1 = 0;
}

O modificador out

A diferença entre o modificador out e o ref, é que o out permite a passagem de uma variável não inicializada por parâmetro, o que não é permitido em parâmetros do tipo ref.

double valor;
Metodo3(out valor);

...

public void Metodo3(out double p1)
{
     p1 = 1000;
     ...
     ...
}

Outra difrença no uso do modificador out, é que o parâmetro obrigatoriamente deve ter um valor atribuído dentro do método, antes de deixá-lo. No exemplo acima, o parâmetro p1 recebe o valor 1000.

Um método naturalmente só pode retornar um valor através da palavra reservada return. Um prática comum é usar parâmetros out para retornar vários.

Definindo classes em C# – Parte 3

Sobrecarga de Métodos (overloading)

A linguagem C# permite que métodos diferentes possuam o mesmo nome. Essa implementação é possível pois a assinatura dos métodos são diferentes. Uma assinatura é formada pelo nome do método e sua lista de parâmetros.

Geralmente o uso da sobrecarga está associada quando uma método precisa de uma série de métodos que adotem parâmetros diferentes, mas que fazem conceitualmente a mesma coisa, como por exemplo quando necessitamos ter parâmetros opcionais, diferentes tipos de entrada ou diferentes tipos de saídas (através dos parâmetros).

public void FaçoAlgumaCoisa()
{
}

public void FaçoAlgumaCoisa(int p1)
{
}

public void FaçoAlgumaCoisa(int p1, int p2)
{
}

public void FaçoAlgumaCoisa(string p1, int p2)
{
}

public void FaçoAlgumaCoisa(int p1, int p2, out int p3)
{
}

A invocação dos metódos acontece de forma tradicional. O compilador da linguagem chamará o método correto conforme a lista dos parâmetos.

FaçoAlgumaCoisa();
FaçoAlgumaCoisa(1);
FaçoAlgumaCoisa(1, 2);
FaçoAlgumaCoisa("1", 2);

int x;
FaçoAlgumaCoisa(1,2, out x);

Quando usamos o VisualStudio o autocomplete dá um força mostrando as sobrecargas do método.

Até mais.

Definindo classes em C# – Parte 2

Métodos Estáticos

No post anterior vimos que uma classe pode ser instanciada, e que cada instância é chamada de objeto. Cada objeto é independente, ou seja, instâncias da mesma classe “não se conhecem”, não compartilham dados.

Pessoa pessoa1 = new Pessoa();
Pessoa pessoa2 = new Pessoa(1,"Filogonio Silva",dataNasc);
Pessoa pessoa3 = new Pessoa(2,"Fippildo Silva",dataNasc);

No código acima, as instâncias (ou objetos) da classe Pessoa, pessoa1, pessoa2 e pessoa3 contêm seus próprios dados. Os membros criados na classe somente podem ser vistos por seus respectivos objetos, pois foram definidos como membros de objetos. Há caso que esse não é o comportamento desejado. É possível definir membros da classe, que são chamados de membros estáticos, não sendo necessário instanciar a classe para usá-los.

A declaração de um membro estático se dá através da palavra reservada static. Um membro estático está disponível desde o momento que o programa é executado.

O código abaixo exemplifica a definição de um atributo estático e sua respectiva propriedade (somente get) para retorna seu valor.

//atributo estático
static int _tamanhoNome = 100;

//propriedade estática
public static int TamanhoNome
{
    get { return _tamanhoNome; }
}

Como dito anteriormente, um membro estático existe deste a execução do programa, não sendo necessária a instanciação da classe, basta acessar a classe e invocar o membro estático.

Pessoa pessoa1 = new Pessoa();
Pessoa pessoa2 = new Pessoa(1, "Filogonio Silva", dataNasc);
Pessoa pessoa3 = new Pessoa(2, "Fippildo Silva", dataNasc);

//Uso de propriedade estática.
Response.Write(Pessoa.TamanhoNome);

Para finalizar, é importante destacar que um método estático não pode acessar outros membros da classe que não sejam estáticos.

Até o próximo…