none
Instanciando classes RRS feed

  • Pergunta

  • Pessoal

    Criei 2 classes (Class1 e Class2).
    Em Class1, tenho um metodo chamado (MetodoClass1).

    Quando estou na classe 2, crio uma instancia de Class1.
    Se crio a instancia a nivel de classe, eu nao consigo enxergar a instancia e seu metodo.
    No entanto se instancio dentro de um metodo, eu consigo enxerga-la e seus metodos.

    Entao instancias so vao funcionar se eu estiver dentro de um metodo ?

    using System;
    namespace CSharp
    {
        public class Class1
        {
            public void MetodoClass1() {
                
            }
        }
    }
    
    ====================================
    
    using System;
    namespace CSharp
    {
        public class Class2
        {
            Class1 c1 = new Class1();
            //Aqui, fora de qualquer metodo, eu nao consigo achar c1 apos cria-la
    
            public void MetodoClass2() {
                Class1 c1 = new Class1();
                c1.MetodoClass1(); //aqui eu consigo
            }
        }
    }
    
    

    quinta-feira, 21 de junho de 2018 03:15

Todas as Respostas

  • AGA Neto, Bom Dia!

    A sua declaração não está errada. Será possível acessar os métodos desse objeto com as duas formas citadas por você!

    Segue uma outra forma de você acessar método do objeto c1.

    public class Class1
     {
        public void MetodoClass1()
        {
           //TODO
        }
     }
        
    public class Class2
    {
        private readonly Class1 c1 = new Class1();
            
        public void MetodoClass2()
        {      
            c1.MetodoClass1(); 
        }
    }

    quinta-feira, 21 de junho de 2018 12:40
  • Não vai funcionar devido ao Field Initialization Order.

    Quando estiver criando uma classe em c# existe uma ordem na qual os fields e constructors são inicializados:

    1. Derived static fields
    2. Derived static constructor
    3. Derived instance fields
    4. Base static fields
    5. Base static constructor
    6. Base instance fields
    7. Base instance constructor
    8. Derived instance constructor

    Ao você tentar utilizar o método:

    c1.MetodoClass1();

    Nos fields da classe gera um erro em tempo de desenvolvimento, pois o Construtor da classe Class1 será executado depois que você está chamando o método. Logo daria um erro de Null Reference Exception.


    Espero ter ajudado! Se consegui, não esquece de marcar no fórum como útil! Obrigado :)

    #fullstack dev - MCSA, MCTS and actually blogging at www.saindodacaixinha.com.br


    • Editado Bruno Brito quinta-feira, 21 de junho de 2018 15:02
    quinta-feira, 21 de junho de 2018 13:56