CS-opas:Attribuutit
Mureakuha
- Teknisistä rajoituksista johtuen artikkelin yllä näkyvä otsikko on virheellinen. Oikea otsikko on C#-opas: Attribuutit.
Sisällysluettelo |
[muokkaa]
Attribute
Attribuuteilla voidaan antaa meta-tietoa luokalle, metodille, propertylle, fieldille yms. Kun ohjelma on käännetty, meta-dataa voidaan ainoastaan lukea käyttäen reflectionia, sitä ei voi muuttaa tai lisätä.
[muokkaa]
Oman attribuutin tekeminen
Atribuutti luokan tulee periytyä System.Attribute luokasta sen kenttät voivat olla jotain seuraavista bool, byte, char, double, float, int, long, short, string, object, public enums ja Type. Esim. Decimal ei ole sallittu.
[muokkaa]
Attribuuttien sijainti
Attrbuuteille pitää määrittää mihin se kuuluu ja vaihtoehtoja on Assembly, Module, Interface, Class, Struct, Enum, Delegate, Constructor, Method, Property, Field, Event, Parameter, ReturnValue tai näiden kaikkien
[muokkaa]
Esimerkki
using System; using System.Diagnostics; using System.Reflection; using System.Collections; //Lisätään luokkalle OmaAttribute, joka kertoo version ja tekijän [OmaAttribute(344, Tekija="Panttu")] public class H6 { public static void Main() { H6 h = new H6(45); //Oma luokka jolle attribuutti on annettu Type t = h.GetType(); //Otetaan siltä tyyppi tieto OmaAttribute[] oa = (OmaAttribute[])t.GetCustomAttributes(typeof(OmaAttribute),false); //tutkitaan OmaAttribute:t H6 luokasta ja tallennetaan OmaAttribute oa taulukkoon Console.WriteLine(oa[0].ToString()); //Tulostetaan tieto kts. OmaAttrubte metodi /* Seuraavilla voisi tutkia attributit metodeilta attribuutteja 'vinkki' MethodInfo[] info = t.GetMethods(); info[0].GetCustomAttributes */ } } //Määritellään mille jäsenille attribute voidaan antaa ja lopuksi sallitaanko useita attribuutteja [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple=true)] public class OmaAttribute: System.Attribute //Peritään Attribute luokasta oma attribuutti { private int versio; //Versio tiedolle private string tekija; //Tekijän tiedolle public int Versio //Versio lukemista varten { get { return this.versio; } } public string Tekija //Tekijä asetetaan ominaisuutena attribuutin määrittelyssä { get { return this.tekija; } set { this.tekija = value; } } public OmaAttribute(int ver) //määritetty parametri { this.versio = ver; } public override string ToString() //Se ainut metodi, joka jotain tekee :) { string s = string.Format("Tekijä: {0} ja versio: {1}",this.tekija,this.versio); return s; } }
