Instantiate class as property of another class

4

I have two classes created within the same namespace , being:

public class Pessoa
{
    public int idPessoa { get; set;}
    public string nome { get; set;}
}

public class PessoaFisica
{
    public Pessoa pessoa { get; set;}
    public string cpf { get; set; }
    public string rg { get; set; }
}

But when I try to use the PessoaFisica class, I get the error message:

  

Object reference not set to an instance of an object.

How do I instantiate the Pessoa class within the PessoaFisica class without having to use the new operator?

The 'Person' and 'Person' classes have the function of DTO. Consequently, they will be used by other classes of business rules to popularize the DataGrids of suppliers, customers and etc.

    
asked by anonymous 09.05.2014 / 14:16

4 answers

2

You can instantiate a new Person in the PersonConstructor:

public PessoaFisica()
{
    pessoa = new Pessoa();
}

If you do not want the personPerson to change the person property, you can change the Setter to private.

public Pessoa pessoa {get; private set; }

This ensures that the property can only be changed by you.

    
09.05.2014 / 14:23
1

The most recommended in this situation is to create a person-to-person inheritance.

Something like:

public class PessoaFisica : Pessoa

But if you want to work without inheritance you need to instantiate the person class in the person builder.

In your person class add a constructor method.

 public PessoaFisica()
 {
     pessoa  = new Pessoa();     
 }
    
09.05.2014 / 14:21
1

You will have to instantiate the Person class, you can do this in GET.

 public class Pessoa {
    public int idPessoa { get; set; }
    public string nome { get; set; }
}

public class PessoaFisica {
    private Pessoa pessoa;
    public Pessoa Pessoa {
        get {
            if (pessoa == null)
                pessoa = new Pessoa();

            return pessoa;
        }
    }
    public string cpf { get; set; }
    public string rg { get; set; }
}
    
09.05.2014 / 14:23
1

Encoding example when Pessoa is added to PessoaFisica .

Normalizing

public class Pessoa
{
    public int IdPessoa { get; set; }
    public string Nome { get; set; }
}

public class PessoaFisica
{
    public PessoaFisica()
    {
        //INSTANCIANDO NO CONTRUTOR
        this.pessoa = new Pessoa();
    }
    private Pessoa pessoa;
    public Pessoa Pessoa
    {
        get { return pessoa; }
        set { pessoa = value; }
    }        
    public string Cpf { get; set; }
    public string Rg { get; set; }
}

Creating a list of PessoaFisica

IList<PessoaFisica> PessoasListaFisica = new List<PessoaFisica>();

PessoasListaFisica.Add(new PessoaFisica()
{
    Pessoa = new Pessoa() { IdPessoa = 1, Nome = "Pessoa1" },
    Cpf ="12345678900", 
    Rg = "147852369SSP"
});
PessoasListaFisica.Add(new PessoaFisica()
{
    Pessoa = new Pessoa() { IdPessoa = 2, Nome = "Pessoa2" },
    Cpf ="00987654321", 
    Rg = "963258741SSP"
});

Using the list of PessoasFisica on DataGridView

dataGridView1.DataSource = PessoasListaFisica.Select(s => new
{
    s.Rg, 
    s.Cpf, 
    s.Pessoa.IdPessoa, 
    s.Pessoa.Nome
}).ToArray();

Result:

    
09.05.2014 / 17:39