É 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?
É 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?
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 !");
}
}
}
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 !");
}
}
}