I would do so:
using System;
public class Program {
public static void Main(string[] args) {
Cliente cliente = new Cliente();
cliente.endereco.rua = "guaranesia";
Console.WriteLine(cliente.endereco.rua);
}
}
class Cliente {
public string name{get; set;}
public string idade { get; set; }
public Endereco endereco = new Endereco();
}
class Endereco {
public string rua { get; set; }
public string bairro { get; set; }
}
See working on dotNetFiddle .
Make the class work for you. Encapsulate the implementation. Make the consumer cleaner and do not make him aware of how he should use the parts of the class. You used the tag encapsulation that shows that you understand that you should use this form, you now need to implement this. You should also consider making the field endereco
as a property.
Actually in a real class you most likely should have builders . Something like this:
using System;
public class Program {
public static void Main(string[] args) {
var cliente = new Cliente();
cliente.Endereco.Rua = "guaranesia";
Console.WriteLine(cliente.Endereco.Rua);
var cliente2 = new Cliente("João", "20", "Rua Torta", "Centro");
Console.WriteLine(cliente2.Endereco.Rua);
var cliente3 = new Cliente() {
Nome = "João",
Idade = "20",
Endereco.Rua = "Rua Torta",
Endereco.Bairro = "Centro"
};
Console.WriteLine(cliente3.Endereco.Rua);
}
}
class Cliente {
public string nome {get; set;}
public string idade {get; set;}
public Endereco Endereco {get; set;}
public Cliente() {
Endereco = new Endereco();
}
public Cliente(string nome, string idade, string rua, string bairro) {
Nome = nome;
Idade = idade;
Endereco = new Endereco(rua, bairro);
}
}
class Endereco {
public string Rua {get; set;}
public string Bairro {get; set;}
//Note que não é preciso criar um construtor Endereco() já que ele não fará nada extra
//O compilador criará um para você
public Endereco(string rua, string bairro) {
Rua = rua;
Bairro = bairro;
}
}