none
Tipo de Classe RRS feed

  • Pergunta

  • Senhores, Bom dia.

    Gostaria de saber se é possivel, pelo code behind, descobrir se uma classe é herdada de outra. É possível?

    ex.: Saber se Classe PermissaoFuncionario é herdada de Classe Permissao.

    Grato.
    quarta-feira, 3 de fevereiro de 2010 13:45

Respostas

  • Olá,

    Sim é possível, por exemplo

    class Program
    {
        static void Main(string[] args)
        {
            PermissaoFuncionario permissaoFuncionario = new PermissaoFuncionario();
    
            if (permissaoFuncionario.GetType().BaseType == typeof(Permissao))
                Console.WriteLine("Classe herda de Permissao");
            else
                Console.WriteLine("Classe não herda de Permissao");
    
            Console.Read();
        }
    }
    
    class PermissaoFuncionario : Permissao { }
    class Permissao { }

    Se a resposta for útil por favor não esqueça de marca.
    Abraços,
    Daniel Fonseca Castro
    www.danielfonsecacastro.com.br
    twitter
    quarta-feira, 3 de fevereiro de 2010 14:11
  • Olá Helio,

    Basta utilizar o método IsSubclassOf da classe Type, que retorna um valor do tipo bool, indicando se a classe herda ou não da classe indicada.

    PermissaoFuncionario p = new PermissaoFuncionario();
    
    // A classe desse objeto herda da classe Permissao?
    if (p.GetType().IsSubclassOf(typeof(Permissao)))
    {
        // Sim...
    }
    


    Abraços,
    Caio Proiete



    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://www.caioproiete.com
    quarta-feira, 3 de fevereiro de 2010 15:04
    Moderador
  •         if (permissaoFuncionario.GetType().BaseType == typeof(Permissao))
                Console.WriteLine("Classe herda de Permissao");

    Apenas para complementar, a propriedade BaseType retorna o tipo da herança imediatamente acima, e não percorre toda a árvore da herança, portanto só é útil quando queremos saber se um determinado tipo herda diretamente de um outro tipo.

    Por exemplo, se tivéssemos essas três classes:

    public class Veiculo { }
    public class Carro : Veiculo { }
    public class CarroFormula1 : Carro { }
    


    O BaseType da classe Carro é Veiculo, mas o BaseType de CarroFormula1 é Carro...

    No entanto, tanto Carro quanto CarroFormula1 herdam da classe Veiculo, portanto ambos herdam da classe Veiculo. A única diferença é que Carro herda diretamente de Veiculo, enquanto CarroFormula1 herda indiretamente, através da classe Carro.

    Abraços,
    Caio Proiete



    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://www.caioproiete.com
    quarta-feira, 3 de fevereiro de 2010 15:10
    Moderador

Todas as Respostas

  • Olá,

    Sim é possível, por exemplo

    class Program
    {
        static void Main(string[] args)
        {
            PermissaoFuncionario permissaoFuncionario = new PermissaoFuncionario();
    
            if (permissaoFuncionario.GetType().BaseType == typeof(Permissao))
                Console.WriteLine("Classe herda de Permissao");
            else
                Console.WriteLine("Classe não herda de Permissao");
    
            Console.Read();
        }
    }
    
    class PermissaoFuncionario : Permissao { }
    class Permissao { }

    Se a resposta for útil por favor não esqueça de marca.
    Abraços,
    Daniel Fonseca Castro
    www.danielfonsecacastro.com.br
    twitter
    quarta-feira, 3 de fevereiro de 2010 14:11
  • Olá Helio,

    Basta utilizar o método IsSubclassOf da classe Type, que retorna um valor do tipo bool, indicando se a classe herda ou não da classe indicada.

    PermissaoFuncionario p = new PermissaoFuncionario();
    
    // A classe desse objeto herda da classe Permissao?
    if (p.GetType().IsSubclassOf(typeof(Permissao)))
    {
        // Sim...
    }
    


    Abraços,
    Caio Proiete



    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://www.caioproiete.com
    quarta-feira, 3 de fevereiro de 2010 15:04
    Moderador
  •         if (permissaoFuncionario.GetType().BaseType == typeof(Permissao))
                Console.WriteLine("Classe herda de Permissao");

    Apenas para complementar, a propriedade BaseType retorna o tipo da herança imediatamente acima, e não percorre toda a árvore da herança, portanto só é útil quando queremos saber se um determinado tipo herda diretamente de um outro tipo.

    Por exemplo, se tivéssemos essas três classes:

    public class Veiculo { }
    public class Carro : Veiculo { }
    public class CarroFormula1 : Carro { }
    


    O BaseType da classe Carro é Veiculo, mas o BaseType de CarroFormula1 é Carro...

    No entanto, tanto Carro quanto CarroFormula1 herdam da classe Veiculo, portanto ambos herdam da classe Veiculo. A única diferença é que Carro herda diretamente de Veiculo, enquanto CarroFormula1 herda indiretamente, através da classe Carro.

    Abraços,
    Caio Proiete



    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://www.caioproiete.com
    quarta-feira, 3 de fevereiro de 2010 15:10
    Moderador