Desafio da Semana #10



 


DESAFIO DA SEMANA #10


 


 


Por: Roberto Alexis Farah


 


Olá pessoal!


Recentemente recebi de um estudante de faculdade um desafio interessante que foi usado em sala de aula.


Por curiosidade resolvi utilizá-lo em entrevistas e obtive um resultado curioso que colocarei ao postar a resposta semana que vem.


Vamos ao desafio…


 


CENÁRIO


 


Aqui coloco o código C# (pode ser replicado e ligeiramente modificado para VB.NET ou C++ com os mesmos resultados):


 


namespace Test


{


        class Program


        {


                public class A


                {


                        public int _a1;


                        public int _b1;


                       


                        public void DoSomething(){


                                                                                _a1 = 1; 


                                                                                Console.WriteLine(“X”);


                                                                  }


                }


               


                public class B : A


                {


                        public int _b1;


                       


                        public void DoSomething()


                        {


                                DoSomething();  // Chamada a classe pai.


                                _b1 = _a1;


                        }


                }


               


                static void Main(string[] args)


                {


                        B b = new B();


                       


                        b.DoSomething();


                }


        }


}


 


 


SINTOMA


 


Como parte do desafio, você deve descobrir o SINTOMA que ocorrerá ao se executar o código acima. Dessa vez não forneço o sintoma.


 


 


OBJETIVO


 


Identifique o SINTOMA, PROBLEMA e proponha uma SOLUÇÃO.


 


Nota: Você deveria resolver apenas analisando o código fonte sem executá-lo, do contrário o desafio se torna muito mais simples.


Nota 2: Não se preocupe, não tenho como saber se você executou o código ou resolveu apenas analisando a listagem acima. J


 


 


 


 

Comments (3)

  1. Luiz Masucato says:

    Boa tarde, este é o meu primeiro acesso ao blog, e achei muito interessante os desfios propostos, sou estudante na área de TI e iniciante desenvolvedor .NET.

    Acho que o desafio proposto irá gerar um looping infinito, pois o método B.DoSomething está chamando ele mesmo, e não o A.DoSomething da classe pai.

    A solução que eu vejo é alterar o nome do método na classe filha e também das chamadas à ela.

    Grato

    Luiz

  2. Edmar Miyake says:

    Olá Farah! Muito interessante este site!

    Parabéns!

    Quanto ao sintoma, acredito que seja o que o Luiz comentou: Um looping no método B.DoSomething(). O problema é que o método da classe B sobrepões o método da classe A herdada.

    A solução seria simplesmente acessar o método da classe A, utilizando a keyword "base". Ou seja:

    base.DoSomething();  // Chamada a classe pai.

    Abraços,

    Edmar Miyake

  3. Roberto Farah says:

    Oi Luiz! Que bom saber que você achou os desafios interessantes.

    Infelizmente é difícil para nós publicarmos algo toda semana, mas tentamos, pode apostar! 🙂 Se você tiver sugestões de tópicos que gostaria de ver abordados fique a vontade para colocar. Não posso prometer que toda recomendação será publicada.

    Oi Edmar, há quanto tempo! Bom receber sua visita por aqui!

    Essa semana estarei colocando a (surpreendente) resposta do desafio.

    Obrigado