using System.Collections.Generic;
public static void Main()
Propriedades = JsonConvert.SerializeObject( new { Tamanho = 0.1m, Material = "Aluminio" } )
var pontaMetalica = new Parte
Propriedades = JsonConvert.SerializeObject( new { Material = "Latão", Peso = 0.02m } )
var pontaClassica = new Parte
Propriedades = JsonConvert.SerializeObject( new { Material = "Plastico", Comprimento = 0.3m } )
Propriedades = JsonConvert.SerializeObject( new { Comprimento = 0.5m, Cor = "Amarela" } )
Propriedades = JsonConvert.SerializeObject( new { Cor = "Azul", Volume = 2m } )
var pontaEsferografica = esfera.MontarEm(pontaMetalica, "Ponta Esferografica");
var pontaCompleta = pontaEsferografica.MontarEm(pontaClassica, "Ponta Completa");
var carga = tinta.MontarEm(pontaCompleta, "Carga de Tinta");
Propriedades = JsonConvert.SerializeObject( new { Cor = "Transparente" } )
Propriedades = JsonConvert.SerializeObject( new { Cor = "Azul", PodeRemover = true } )
var corpo = carga.MontarEm(cilindro, "Corpo Completo");
var caneta = tampa.MontarEm(corpo, "Caneta Completa");
ListaEstruturaCompleta(caneta);
private static void ListaEstruturaCompleta(Parte parte, int nivel = 0)
Console.WriteLine(" ".PadLeft(nivel) + " - " + parte.Nome +": " + parte.Propriedades);
foreach(var componente in parte.Partes)
ListaEstruturaCompleta(componente, nivel+1);
public Guid Id {get;set;}
public string Nome {get;set;}
public string Propriedades {get;set;}
public List<Parte> Partes {get;set;}
public Parte MontaEm {get;set;}
Partes = new List<Parte>();
public Parte MontarEm(Parte parte, string nome)
var novaParte = new Parte
novaParte.Partes.AddRange(new [] { this, parte});