none
Chamar metodo apos outro? RRS feed

  • Pergunta

  • Bom dia pessoal


    como fazer uma classe que chame um metodo  apos outro???

    Code Snippet

    Ex:

    Classe cls = new Classe();
    decimal dec = cls.Metodo1().Metodo2().CalculaIcms();

    isso tem nome em OO ou segue algum padrão???


    Desde já sou grato
    terça-feira, 7 de outubro de 2008 13:22

Respostas

  • Olá Leonel,

     

    Tudo depende do tipo retornado pelo seu método...

     

    No seu exemplo, o método CalculaIcms será executado no objeto retornado pelo Metodo2, que por sua vez, é executado no objeto retornado pelo Metodo1.

     

    Na verdade, essa expressão é apenas uma atalho para algo assim:

     

    Code Snippet

     

     Classe cls = new Classe();

     

     // Executa o Metodo1 e obtém o objeto de "AlgumaClasse"

     AlgumaClasse obj1 = cls.Metodo1();

     

     // Executa o Metodo2 no objeto retornado pelo Metodo1,

     // e obtém o objeto de "AlgumaOutraClasse"

     AlgumaOutraClasse obj2 = obj1.Metodo2();

     

     // Agora sim, executa o método CalculaIcms no objeto retornado pelo Metodo2

     decimal dec = obj2.CalculaIcms();

     

     

     

    Respondendo sua pergunta, para exemplificar, vamos de trás para frente:

     

    Primeiro passo, vamos criar uma classe chamada "Impostos", que possui o método CalculaIcms:

     

    Code Snippet

     

     public class Impostos

     {

    public decimal CalculaIcms()

    {

    // "Faz de conta" que calculou e retornou 200,00 :)

    return 200M;

    }

     }

     

     

     

    Segundo passo, vamos criar uma classe chamada "Calculadora", que utiliza a classe Impostos no método Metodo2, e devolve um objeto da classe Impostos.

     

    Code Snippet

     

     public class Calculadora

     {

    public Impostos Metodo2()

    {

    // Cria um novo objeto da classe "Impostos"

    Impostos obj = new Impostos();

     

    //...

     

    // Retorna o objeto

    return obj;

    }

     }

     

     

     

    Por fim, vamos criar a sua classe chamada "Classe", que utiliza a classe Calculadora no metodo Metodo1, e devolve um objeto da classe Calculadora:

     

    Code Snippet

     

     public class Classe

     {

    public Calculadora Metodo1()

    {

    // Cria um novo objeto da classe "Calculadora"

    Calculadora obj = new Calculadora();

     

    //...

     

    // Retorna o objeto

    return obj;

    }

     }

     

     

     

    Agora basta fazer a chamada que você quer para calcular o Icms:

     

    Code Snippet

     

     Classe cls = new Classe();

     decimal dec = cls.Metodo1().Metodo2().CalculaIcms();

     

     

     

    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    terça-feira, 7 de outubro de 2008 13:46
    Moderador

Todas as Respostas

  • Olá Leonel,

     

    Tudo depende do tipo retornado pelo seu método...

     

    No seu exemplo, o método CalculaIcms será executado no objeto retornado pelo Metodo2, que por sua vez, é executado no objeto retornado pelo Metodo1.

     

    Na verdade, essa expressão é apenas uma atalho para algo assim:

     

    Code Snippet

     

     Classe cls = new Classe();

     

     // Executa o Metodo1 e obtém o objeto de "AlgumaClasse"

     AlgumaClasse obj1 = cls.Metodo1();

     

     // Executa o Metodo2 no objeto retornado pelo Metodo1,

     // e obtém o objeto de "AlgumaOutraClasse"

     AlgumaOutraClasse obj2 = obj1.Metodo2();

     

     // Agora sim, executa o método CalculaIcms no objeto retornado pelo Metodo2

     decimal dec = obj2.CalculaIcms();

     

     

     

    Respondendo sua pergunta, para exemplificar, vamos de trás para frente:

     

    Primeiro passo, vamos criar uma classe chamada "Impostos", que possui o método CalculaIcms:

     

    Code Snippet

     

     public class Impostos

     {

    public decimal CalculaIcms()

    {

    // "Faz de conta" que calculou e retornou 200,00 :)

    return 200M;

    }

     }

     

     

     

    Segundo passo, vamos criar uma classe chamada "Calculadora", que utiliza a classe Impostos no método Metodo2, e devolve um objeto da classe Impostos.

     

    Code Snippet

     

     public class Calculadora

     {

    public Impostos Metodo2()

    {

    // Cria um novo objeto da classe "Impostos"

    Impostos obj = new Impostos();

     

    //...

     

    // Retorna o objeto

    return obj;

    }

     }

     

     

     

    Por fim, vamos criar a sua classe chamada "Classe", que utiliza a classe Calculadora no metodo Metodo1, e devolve um objeto da classe Calculadora:

     

    Code Snippet

     

     public class Classe

     {

    public Calculadora Metodo1()

    {

    // Cria um novo objeto da classe "Calculadora"

    Calculadora obj = new Calculadora();

     

    //...

     

    // Retorna o objeto

    return obj;

    }

     }

     

     

     

    Agora basta fazer a chamada que você quer para calcular o Icms:

     

    Code Snippet

     

     Classe cls = new Classe();

     decimal dec = cls.Metodo1().Metodo2().CalculaIcms();

     

     

     

    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    terça-feira, 7 de outubro de 2008 13:46
    Moderador
  • Só complementando a resposta do Caio, sugestão de alguns termos relacionados ao tema para facilitar a pesquisa:

    Fluent Interfaces e Method Chaining.
    terça-feira, 7 de outubro de 2008 18:27