Ős osztály
Lehetőség van saját attribútum-osztály létrehozására. Ezen osztályokban tárolt információkat sem a fordító sem a futtató rendszer nem fogja feldolgozni, de egy másik kódból ez lekérdezhető futás közben.
Amennyiben saját attribútum-osztályt kívánunk készíteni, ősnek mindenképpen a System.Attribute osztály, vagy valamelyik gyermekosztályát kell választanunk.
Pl.:
class SajatAttributum : Attribute
{
public string fejlesztoNeve = String.Empty;
public string fejlesztoEmail = String.Empty;
public string keszitesDatuma = String.Empty;
public SajatAttributum(string nev, string email)
{
fejlesztoNeve = nev;
fejlesztoEmail = email;
}
}
Név választás
Lehetőség van saját attribútum-osztály létrehozására. Ezen osztályokban tárolt információkat sem a fordító sem a futtató rendszer nem fogja feldolgozni, de egy másik kódból ez lekérdezhető futás közben.
Amennyiben saját attribútum-osztályt kívánunk készíteni, annak nevet kell adni. A jó attributum-név nem túl hosszú, és a vége ’...Attribute’. Ugyanis a kódban elhelyezett attribútum-példányosítás során meg kell adni ezt az attribútum-nevet, de amennyiben a vége ’...Attribute’, akkor azt nem kötelező kiírni.
Pl.:
class SajatAttributum : Attribute
{
...
}
.. helyett inkább:
class SajatAttribute : Attribute
{
...
}
Hol akarjuk használni
Lehetőség van saját attribútum-osztály létrehozására. Ezen osztályokban tárolt információkat sem a fordító sem a futtató rendszer nem fogja feldolgozni, de egy másik kódból ez lekérdezhető futás közben.
Amennyiben saját attribútum-osztályt kívánunk készíteni, meg kell adnunk azt, hogy milyen elemekre engedjük azt rárakni. A lehetséges értékeket az AttributeTargets enum tartalmazza. A legfontosabbak:
- All : mindenre
- Field: mezőkre
- Class: osztályokra
- Method: metódusokra
- Assembly: az assembly-re
Ezekből kell összekombinálni a szükséges esetet. Az eredményt szintén attribútumként (AttributeUsage segítségével) kell az új osztály deklarációja előtt elhelyezni:
Pl.:
[AttributeUsageAttribute(AttributeTargets.Field | AttributeTargets.Class)]
class SajatAttribute : Attribute
{
...
}
A fenti példában az új Sajat nevű attribútumot csak mezőkre és osztályokra szabad majd használn.
Konstruktorok
Lehetőség van saját attribútum-osztály létrehozására. Ezen osztályokban tárolt információkat sem a fordító, sem a futtató rendszer nem fogja feldolgozni, de egy másik kódból ez lekérdezhető futás közben.
Amennyiben saját attribútum-osztályt kívánunk készíteni, meg készítenünk kell hozzá konstruktort (vagy konstruktorokat). Ezen konstruktor értékeket vesz át a paramétereiben, és menti el azokat a mezőkbe:
Pl.:
[AttributeUsageAttribute(AttributeTargets.All)]
class SajatAttribute : Attribute
{
public string fejlesztoNeve = String.Empty;
public string fejlesztoEmail = String.Empty;
public string keszitesDatuma = String.Empty;
public SajatAttribute(string nev, string email)
{
fejlesztoNeve = nev;
fejlesztoEmail = email;
}
public SajatAttribute(string nev)
{
fejlesztoNeve = nev;
}
}
Pozíciós paraméterek
Amennyiben egy attribútumot elhelyezünk a kódban, úgy azt szögletes zárójelek között kell megtenni, és a zárójelpárban a konstruktort a nevével és paramétereivel aktiválni. Ha több konstruktorunk is van, akkor választani kell közülük.
Pl.:
[Sajat(”Gipsz Jakab”)]
static void VektorKiiras()
{
...
}
az alábbi attribútumosztály esetén ez az egyparaméteres konstruktor (név) aktivizálását jelenti:
[AttributeUsageAttribute(AttributeTargets.All)]
class SajatAttribute : Attribute
{
public string fejlesztoNeve = String.Empty;
public string fejlesztoEmail = String.Empty;
public string keszitesDatuma = String.Empty;
public SajatAttribute(string nev, string email)
{
fejlesztoNeve = nev;
fejlesztoEmail = email;
}
public SajatAttribute(string nev)
{
fejlesztoNeve = nev;
}
}
Nevesített paraméterek
Amennyiben egy attribútumot elhelyezünk a kódban, úgy azt szögletes zárójelek között kell megtenni, és a zárójelpárban a konstruktort a nevével és paramétereivel aktiválni. Ha több konstruktorunk is van, akkor választani kell közülük. Ha olyan mezőnk is van, amelybe konstruktor nem tesz értéket, akkor azt nevesített formában tehetjük meg (mezőnév, ’=’, érték):
Pl.:
[Sajat(”Gipsz Jakab”, keszitesDatuma=”2006.07.02”)]
static void VektorKiiras()
{
...
}
az alábbi attribútumosztály esetén ez az egyparaméteres konstruktor (név) aktivizálását jelenti:
[AttributeUsageAttribute(AttributeTargets.All)]
class SajatAttribute : Attribute
{
public string fejlesztoNeve = String.Empty;
public string fejlesztoEmail = String.Empty;
public string keszitesDatuma = String.Empty;
public SajatAttribute(string nev, string email)
{
fejlesztoNeve = nev;
fejlesztoEmail = email;
}
public SajatAttribute(string nev)
{
fejlesztoNeve = nev;
}
}
Paraméterek típusai
A saját (és beépített) attribútum-osztályok konstruktorai paraméterekkel rendelkezhetnek. Ezek típusaira nincs megkötés, de nagyon jellemző, hogy a konkrét felhasználáskor (példányosítás) literálokat vagy konstansokat írunk az aktuális paraméterlistába.
Literálok és konstansokat legegyszerűbben sztring, egész szám, valós szám, karakter, és logikai típusokból tudunk létrehozni, ezért célszerű ezen típusokból választani a konstruktorok és a mezők paramétereit.