using System.Collections;
using System.Collections.Generic;
public enum CaixaTransmissao{
AUTOMATIZADA_DUPLA_EMBREAGEM
public interface ITransmissao {
CaixaTransmissao TipoTransmissao { get; set; }
int QuantidadeMarchas {get; set;}
class TracaoDianteira: ITransmissao{
public TracaoDianteira(){
TipoTransmissao = CaixaTransmissao.MECANICA;
public CaixaTransmissao TipoTransmissao { get; set; }
public int QuantidadeMarchas { get; set; }
public enum CarroceriaTeto{
public interface ICarroceria {
int Volumes { get; set; }
CarroceriaTeto Teto { get; set; }
public interface IAutomovel: ITransmissao, ICarroceria {
public string Ano {get; set;}
public string Preco {get; set;}
public class SedanExemplo: IAutomovel{
public string Ano {get; set;}
public string Preco {get; set;}
public int QuantidadeMarchas {get; set;}
public CaixaTransmissao TipoTransmissao { get; set; }
public int Volumes { get; set; }
public CarroceriaTeto Teto { get; set; }
TipoTransmissao = CaixaTransmissao.MECANICA;
Teto = CarroceriaTeto.FIXO;
public static class FabricaVeiculos
public static IAutomovel ConstruirAutomovel(int categoria, int tipo)
return new SedanExemplo();
public static class Inspecionador
public static string FullName(this IAutomovel value)
=> $"Ano: {value.Ano} Preço: {value.Preco} Quantidade de Marchas:{value.QuantidadeMarchas} TipoTransmissao: {value.TipoTransmissao} Volumes: {value.Volumes} Teto: {value.Teto}";
public static void Main()
IAutomovel automovel = FabricaVeiculos.ConstruirAutomovel(1,1);
var caracteristicas = Inspecionador.FullName(automovel);
Console.WriteLine(caracteristicas);