none
Como criar uma propriedade que armazena o tipo de uma classe RRS feed

  • Pergunta

  • Estou desenvolvendo um projeto e nele tenho algumas classes que possuem uma propriedade comum a todas elas, porém o tipo dessa propriedade varia de acordo com a classe, por exemplo:

    • Tenho as classes PessoaDAO, EnderecoDAO e EmpresaDAO;
    • Todas as classes tem uma propriedade chamada "Conversor";
    • Porém cada classe tem um tipo de Conversor diferente (PessoaDAO => PessoaConversor, EnderecoDAO => EnderecoConversor, EmpresaDAO => EmpresaConversor);
    • Todas as classes Conversor herdam a classe ConversorBase;

    Eu sei que consigo criar um DAOBase e dentro dele colocar uma propriedade Conversor do tipo ConversorBase, e em cada DAO filho eu implemento essa propriedade com o seu respectivo tipo. O problema é que toda vez que eu utilizar o Conversor tenho que ficar convertendo ele para o tipo da classe em questão: (base.Conversor as  PessoaConversor,).Metodo, (base.Conversor as  EnderecoConversor,).Metodo, (base.Conversor as  EmpresaConversor,).Metodo.

    Então a minha dúvida é a seguinte: Existe alguma forma de eu armazenar o tipo de uma classe dentro de uma propriedade de outra classe?

    Pois dessa forma eu conseguiria deixar tudo na classe mãe de todos os DAOs, pois eu teria uma propriedade chamada ClasseConversor e poderia implementar a propriedade Conversor na classe mãe: this.Conversor = new ClasseConversor(). Também poderia alterar o Get do Conversor para facilitar o uso dele nas classes filhas: get { return (Conversor as ClasseConversor) }


    sexta-feira, 27 de julho de 2018 11:27

Respostas

  • >Existe alguma forma de eu armazenar o tipo de uma classe dentro de uma propriedade de outra classe?

    Sim, existe. Você pode criar sua classe conversor como Generics, exemplo:

    Primeiro, um exemplo de como deveria ser estruturada a classe Conversor:

    public class Conversor<T>
    {
        private T _value;
    
        public T Value
        {
            get
            {
                // lógica GET conversor aqui 
                return _value;
            }
            set
            {
                // lógica SET conversor aqui 
                _value = value;
            }
        }
    
        public static implicit operator T(Conversor<T> value)
        {
            return value.Value;
        }
    
        public static implicit operator Conversor<T>(T value)
        {
            return new Conversor<T> { Value = value };
        }
    }

    Depois é só criar as outras classes como:

    class Pessoa
    {
        public Conversor<Pessoa> ConversorPessoa{ get; set; }
    }
    
    class Endereço
    {
        public Conversor<Endereço> ConversorEndereço { get; set; }
    }
    
    class Empresa
    {
        public Conversor<Empresa>  ConversorEmpresa { get; set; }
    }

    Veja funcionando aqui:  .NETFiddle


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    sexta-feira, 27 de julho de 2018 13:35
    Moderador

Todas as Respostas

  • >Existe alguma forma de eu armazenar o tipo de uma classe dentro de uma propriedade de outra classe?

    Sim, existe. Você pode criar sua classe conversor como Generics, exemplo:

    Primeiro, um exemplo de como deveria ser estruturada a classe Conversor:

    public class Conversor<T>
    {
        private T _value;
    
        public T Value
        {
            get
            {
                // lógica GET conversor aqui 
                return _value;
            }
            set
            {
                // lógica SET conversor aqui 
                _value = value;
            }
        }
    
        public static implicit operator T(Conversor<T> value)
        {
            return value.Value;
        }
    
        public static implicit operator Conversor<T>(T value)
        {
            return new Conversor<T> { Value = value };
        }
    }

    Depois é só criar as outras classes como:

    class Pessoa
    {
        public Conversor<Pessoa> ConversorPessoa{ get; set; }
    }
    
    class Endereço
    {
        public Conversor<Endereço> ConversorEndereço { get; set; }
    }
    
    class Empresa
    {
        public Conversor<Empresa>  ConversorEmpresa { get; set; }
    }

    Veja funcionando aqui:  .NETFiddle


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    sexta-feira, 27 de julho de 2018 13:35
    Moderador
  • Boa tarde,

    Por falta de retorno essa thread está encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 3 de agosto de 2018 19:22
    Moderador