Press enter to see results or esc to cancel.

Desafio C# 1: Herança, Reflection e Custom Attributes

Este desafio visa fomentar o conhecimento de C# através da utilização do conceito de herança aliado com reflection e criação de customs atributos. No final teremos 4 classes:

  • class A
  • class B:A
  • class C:B
  • class OrdemAtributoAttribute : Attribute
Dentro de 5 dias publico/disponibilizo a resposta proposta por quem vos escreve, eu =]

Conceitos aplicados no desafio:

  • Atributos
  • Herança
  • Propriedades
  • Criar projeto console c#
  • Criação de classes

Exercicio 1:

Declarar 3 classes publicas A,B e C. Sendo que B herda de A e C herda de B Na classe A criar 3 propriedades public , do tipo string, o nome não importa. Na classe B criar 5 propriedades public , do tipo string, o nome não importa. Na classe C criar 7 propriedades public , do tipo string, o nome não importa. Em todas as propriedades devem ser do tipo auto property (obs: vlw, Mahmoud)

Exemplo:

 public string PropA1{get;set;} 

No construtor de cada classe(A,B e C), inicializar todas as propriedades com algum valor

Exercicio 2:

Sugestão=>Utilizar reflection(http://stackoverflow.com/questions/2267277/get-private-properties-method-of-base-class-with-reflection) Criar na classe A, um metodo: string ObterValorTodasPropriedadesConcatenadas(); O método ObterValorTodasPropriedadesConcatenadas, deverá retornar concatenado o valor de todas as propriedades do objeto que invocou o método, neste exercício, todos as propriedades da classe A.

Exemplo:

 
public class Program{ 
    public void Main(){ 
        var a=new A() ;
        var valorTodasPropriedades=a.ObterValorTodasPropriedadesConcatenadas(); 
        Console.WriteLine(valorTodasPropriedades); 
        //O resultado deverá ser uma string, concatenando todas as propriedades da classe A 
    } 
} 

Exercicio 3:

Criar uma instância da Classe B( a qual herda de A, ou seja, public class B:A. E alterar o método string ObterValorTodasPropriedadesConcatenadas(); para retornar além de concatenar as propriedades do filho B, mas também do pai A.

Exemplo:

 public class Program{ public void Main(){ var b=new B() var valorTodasPropriedades=b.ObterValorTodasPropriedadesConcatenadas(); Console.WriteLine(valorTodasPropriedades); //O resultado deverá ser uma string, concatenando todas as propriedades da classe B e da classe A } } 

Exercicio 4:

Realizar o mesmo do exercício 3, mas agora para a classe C, criar uma instância da Classe C( a qual herda de B, ou seja, public class C:B. E alterar o método string ObterValorTodasPropriedadesConcatenadas(); para retornar além de concatenar as propriedades das suas( da classe C, agora filho), mas também do pai B e do avô A.

Exemplo:

 public class Program{ public void Main(){ var c=new C() var valorTodasPropriedades=c.ObterValorTodasPropriedadesConcatenadas(); Console.WriteLine(valorTodasPropriedades); //O resultado deverá ser uma string, concatenando todas as propriedades da classe C,B e A } } 

Exercicio 5:

http://msdn.microsoft.com/en-us/library/bfz783fz(v=vs.110).aspx Em cada atributo das 3 classes criadas, colocar um atributo que permita informar a ordem que as propriedades serão concatenadas; E alterar o método string ObterValorTodasPropriedadesConcatenadas(); para respeitar os valores atribuídos pelos atributos

Exemplo:

 public class C{ [OrdemAtributo(1)] public string PropC1 { get; set; } [OrdemAtributo(2)] public string PropC2 { get; set;} } 

Exercicio 6:

http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices(v=vs.110).aspx Utilizar o atributo CallerLineNumber, no construtor do atributo, para obter o numero da linha à qual a propriedade foi declarada na classe, tornando desnecessário(optional) a informação da ordem no construtor do atributo.

Exemplo:

 public OrdemAtributoAttribute([CallerLineNumber]int ordem=0) 

Tweet about this on TwitterShare on FacebookShare on LinkedInEmail this to someone
Comments

Leave a Comment