Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Sobre instancia de classe

É permitido instanciar uma classe dentro da mesma classe? caso sim, em qual cenário é mais usado esse método?

Adotando esse procedimento não corre o risco de ter um loop infinito?

3 respostas

Olá Alan, tudo certo?

Normalmente as instâncias de outras classes são criadas dentro dos métodos ou dentro dos construtores. Isso na verdade é bem comum, outro caso de uso são para criar propriedades. Você pode definir normalmente as propriedades de suas classes usando outros tipos complexos.

Quanto ao loop infinito, me parece até contra intuitivo criar uma instância da classe dentro dela mesma. Mas o resultado é um StackOverflow ao invés de um loop infinito. Ou seja, é criado um objeto dentro do outro e uma hora a memória concedida à aplicação irá acabar e isso acarretará em um StackOverflow.

Segue este link da documentação onde traz mais detalhes sobre o que é um StackOverflow.

Bons estudos!

Então, esse simples teste, eu não consegui fazer o "a1" e "a2" ser identificado pela classe TesteInstancia... o que esqueci de fazer ou o que fiz de errado?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Atividade {
    public class TesteInstancia {

        classe1 a1 = new classe1();//ok
        classe2 a2 = new classe2();//ok

        a1.teste();// identificou a classe... mas não encontrou o metodo

        a2.teste();// identificou a classe... mas não encontrou o metodo

    }

    public class classe1 {

        public void teste() {
            Console.WriteLine("classe 1 funcionando!");
        }
    }

    public class classe2 {
        public void teste() {
            Console.WriteLine("classe 2 funcionando !");
        }
    }
}
solução!

Percebi que o erro é por conta de ter esquecido de criar um método.. sendo assim, criei o método instanciador e de lá fiz as chamadas. abaixo esta a modificação que fiz!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Atividade {
    public class TesteInstancia {

        classe1 a1 = new classe1();//ok
        classe2 a2 = new classe2();//ok

        public void instanciador() {

            a1.teste();// funcionou!
            a2.teste();// funcionou!
        }



    }

    public class classe1 {

        public void teste() {
            Console.WriteLine("classe 1 funcionando!");
        }
    }

    public class classe2 {
        public void teste() {
            Console.WriteLine("classe 2 funcionando !");
        }
    }
}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software