Métodos c#

Segundo o site da Microsoft, “Um método é um bloco de código que contém uma série de instruções. Um programa faz com que as instruções sejam executadas chamando o método e especificando os argumentos de método necessários. No C#, todas as instruções executadas são realizadas no contexto de um método”. Ainda no site a Microsoft complementa “os métodos são declarados em uma classe ou struct especificando o nível de acesso, como public ou private, modificadores opcionais, como abstract ou sealed, o valor retornado, o nome do método e os parâmetros de método”.

O principal objeto de um método é implementar a logica requerida para um comportamento ou funcionalidade dentro da classe.

No exemplo abaixo tenho uma classe PetBath que implementa o método OrderBath.

using System;
namespace MethodSample
{
    public class PetBath
    {
        public void OrderBath(Pet pet, DateTime dateSchedule)
        {
            throw new NotImplementedException();
        }
    }
}

OrderBath possui dois parâmetros, o primeiro é um objeto do tipo Pet com informações sobre o animal e o segundo é um DateTime que é o dia e hora do agendamento do banho.

Uma duvida comum é saber qual a diferença entre parâmetro e argumento de um método, e a resposta é simples:
– Um parâmetro é parta da assinatura do método. Como no exemplo acima.
– Um argumento é parte da chamada ao método. Abaixo podemos ver que os argumentos são as variáveis petArg e scheduleArg

var petArg = new Pet();
var scheduleArg = DateTime.Now;
petBath.OrderBath(petArg, scheduleArg);

Overloading

Métodos com o mesmo nome e objetivo, mas com diferentes assinaturas. No exemplo abaixo, ambos os métodos vão realizar um agendamento no sistema.
Note que ambos tem o mesmo nome, mas contem assinaturas diferente.

using System;
namespace MethodSample
{
    public class PetBath
    {
        public void OrderBath(Pet pet)
        {
            throw new NotImplementedException();
        }

        public void OrderBath(Pet pet, DateTime dateSchedule)
        {
            throw new NotImplementedException();
        }
    }
}

Chaining
Um método overload realiza a chamada de outro método overload para evitar a repetição de código. Veja no exemplo abaixo como é realizada a chamada a chamada de cada metodo e o unico que deveria conter logica de programação é o:
– void OrderBath(Pet pet, DateTime dateSchedule, int weeklyRepetition, bool prepaid)

using System;
namespace MethodSample
{
    public class PetBath
    {
        public void OrderBath(Pet pet)
        {
            OrderBath(pet, DateTime.Now, 0, false);
        }

        public void OrderBath(Pet pet, DateTime dateSchedule)
        {
            OrderBath(pet, dateSchedule, 0, false);
        }

        public void OrderBath(Pet pet, DateTime dateSchedule, int weeklyRepetition)
        {
            OrderBath(pet, dateSchedule, weeklyRepetition, false);
        }

        public void OrderBath(Pet pet, DateTime dateSchedule, int weeklyRepetition, bool prepaid)
        {
            throw new NotImplementedException();
        }
    }
}

Overriding

Substitui o método que foi definido em uma hierarquia mais alta.
Em uma definição mais formal: “Um método override fornece uma nova implementação de um membro herdado de uma classe base. O método que é substituído por uma declaração override é conhecido como o método base substituído. O método base substituído deve ter a mesma assinatura que o método override.”

// => main program
using System;
namespace MethodSample
{
    class Program
    {
        static void Main(string[] args)
        {
            var petShopStore = new PetShopStore();
            var pet = new Pet();
            petShopStore.OrderBath(pet, DateTime.Now);
        }
    }
}

// => implementation class
using System;
namespace MethodSample
{
    public class PetBath
    {
        public virtual void OrderBath(Pet pet, DateTime dateSchedule)
        {
            Console.WriteLine("PetBath Class");
            throw new NotImplementedException();
        }
    }

    public class PetShopStore : PetBath
    {
        public override void OrderBath(Pet pet, DateTime dateSchedule)
        {
            Console.WriteLine("PetShopStore Class");
            return;
        }
    }
}

Expression-bodied

Um atalho na sintaxe para métodos com um único “statement” que retorna um valor.
Segunda a microsoft, estes métodos “permitem que você forneça uma implementação de um membro em uma forma bastante concisa e legível. Você pode usar uma definição de corpo da expressão sempre que a lógica para qualquer membro com suporte, como um método ou propriedade, consiste em uma única expressão.”

// => main program
using System;
namespace MethodSample
{
    class Program
    {
        static void Main(string[] args)
        {
            var petBath = new PetBath();
            var pet = new Pet() { PetName = "BigBoss" };
            petBath.OrderBath(pet);
        }
    }
}

// => implementation class
namespace MethodSample
{
    public class Pet
    {
        public string PetName { get; set; }
    }
}

// => implementation class
using System;
namespace MethodSample
{
    public class PetBath
    {
        public string OrderBath(Pet pet) => pet.PetName;
    }
}

Conclusão

Estes são apenas alguns exemplos de declaração de métodos. Estes exemplos selecionados pois são os mais comuns de aparecerem em todo tipo de projetos C#.

Qualquer dúvida ou dicas, entre em contato: leandrolt@gmail.com

Referencia:
Expression-bodied members
override

Leave a Reply

Your email address will not be published. Required fields are marked *