public class Conversor<T>
public static implicit operator T(Conversor<T> value)
public static implicit operator Conversor<T>(T value)
return new Conversor<T> { Value = value };
public Pessoa(string nome)
public string nome {get;set;}
public Conversor<Pessoa> ConversorPessoa{ get; set; }
public Endereço(string rua)
public string rua {get;set;}
public Conversor<Endereço> ConversorEndereço { get; set; }
public Empresa(string razaosocial)
this.razaosocial=razaosocial;
public string razaosocial {get;set;}
public Conversor<Empresa> ConversorEmpresa { get; set; }
public static void Main()
Pessoa pessoa=new Pessoa("William");
Endereço endereco=new Endereço("123, aaaa");
Empresa empresa=new Empresa("Sogi");
pessoa.ConversorPessoa=new Pessoa("Michel");
endereco.ConversorEndereço=new Endereço("123, bbbb");
empresa.ConversorEmpresa= new Empresa("Isovision");
Console.WriteLine("Pessoa : {0} ---- Conversor : {1}",pessoa.nome, ((Pessoa)pessoa.ConversorPessoa).nome);
Console.WriteLine("Endereço : {0} ---- Conversor : {1}",endereco.rua, ((Endereço)endereco.ConversorEndereço).rua);
Console.WriteLine("Empresa : {0} ---- Conversor : {1}",empresa.razaosocial, ((Empresa)empresa.ConversorEmpresa).razaosocial);