post icon

Extends Attribute and Property Reflection

Vediamo come estendere la classe Attribute ed usare la Reflection sulle Proprietà di una classe.

Vediamo anche come ricavare gli attributi impostati sulle Proprietà di una classe Automobile.

using System; using System.Reflection; namespace CodeSnippet.it { public enum Priorita{Alta=0, Media = 1, Bassa = 2} class Automobile { private String colore; private String marca; [AttributiAutomobile(Priorita = Priorita.Media)] public String Colore { get { return this.colore; } set { this.colore = value; } } [AttributiAutomobile(Priorita = Priorita.Alta)] public String Marca { get { return this.marca; } set { this.marca = value; } } public Automobile() { // Costruttore this.marca = "FIAT"; this.colore = "NERO"; } } //System.AttributeTargets.Property indica che gli attributi //vanno usati sulle Property di una classe [System.AttributeUsage(System.AttributeTargets.Property)] public class AttributiAutomobile : Attribute { private Priorita priorita; public Priorita Priorita { get { return this.priorita; } set { this.priorita = value; } } } class Program { static void Main(string[] args) { Type t = typeof(Automobile); //Recupero la collection di tutte le Proprietà del Type Automobile. PropertyInfo[] propInfo = t.GetProperties(); //Volendo si può recuperare anche una singola proprietà PropertyInfo p_Colore = t.GetProperty("Colore"); //Creo un oggetto di tipo Automobile Automobile myAuto = new Automobile(); //Mostro i valori assegnati dal costruttore Console.WriteLine("Colore: " + p_Colore.GetValue(myAuto, null).ToString()); Console.WriteLine("Marca: " + myAuto.Marca); //per ogni Proprietà mostro l'attributo Priorità foreach (PropertyInfo p in propInfo) { //Mostro il nome della Property Console.WriteLine("Nome Proprietà: " + p.Name); //Mostro il tipo della Property Console.WriteLine("Tipo Proprietà:" + p.PropertyType.Name); //Recupero gli attributi AttributiAutomobile _at = (AttributiAutomobile)Attribute.GetCustomAttribute(p, typeof(AttributiAutomobile)); //Mostro il valore dell'Attributo Priorità impostato sulle singole Proprietà Console.WriteLine("Priorità:" + _at.Priorita.ToString()); //Assegno dinamicamente un valore alla Proprietà p.SetValue(myAuto, "Valore assegnato mediante Reflection", null); } //Mostro i valori assegnati dinamicamente Console.WriteLine("Colore: " + myAuto.Colore); Console.WriteLine("Marca: " + myAuto.Marca); Console.Read(); } } }
23 ottobre 2009 @ 10:13

No comments yet.

Leave a comment

Leave a Reply

Are you human? Time limit is exhausted. Please reload CAPTCHA.