CS-opas:Attribuutit

Mureakuha

Loikkaa: valikkoon, hakuun
Teknisistä rajoituksista johtuen artikkelin yllä näkyvä otsikko on virheellinen. Oikea otsikko on C#-opas: Attribuutit.

Sisällysluettelo

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ä.

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.

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

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;
	}
}
Henkilökohtaiset työkalut