Meta-adatok
A meta adatok nem részei a futtatható kódnak szigorú értelemben, de ugyanakkor egy helyen kerülnek tárolásra velük. Ilyen értelemben fizikailag benne vannak az .exe vagy .dll fájlokban.
A meta adatok kiegészítő információkat hordoznak, amelyek akár futtatás közben is hasznosak lehetnek (amennyiben a futtató rendszer képes őket értelmezni), de sokkal fontosabb szerepük lehet egy ismeretlen .exe vagy .dll fájl tulajdonságainak megállapításában, hasznosságának és megbízhatóságának eldöntésében.
Meta-adatok használatának lehetőségei
Meta adat formájában tárolódik például egy .dll belsejében a
- a készítő cég neve
- a verziószáma
- a digitális aláírása
- a szerzői jogok (copyright)
De hasonló információkat akár osztály vagy metódus szinten is lehet tárolni. Ennek megfelelően minden egyes osztályról és eljárásról el lehet tárolni, hogy a cégen belül melyik programozó készítette.
Szintén hasznos felhasználási lehetőség metaadat formájában dokumentációt tárolni az assembly belsejében a metódusokról vagy osztályokról, így az garantáltan nem veszik el, nem kerül messzire el a kódtól.
Természetesen komplett dokumentációt nem szoktunk becsomagolni egy-egy assembly belsejében meta adat formájában, hiszen az jelentősen növeli annak méretét. De apróbb kis emlékeztetőknek van értelmük.
Hogyan használjuk az attribútumokat
A metaadatokat attribútumok formájában írjuk be a megfelelő elem elé. Tehát ha egy osztályhoz akarunk meta adatot tárolni, akkor írjuk azt az osztály deklaráció elé. Ha mezőhöz, akkor a mező deklaráció elé, stb.
Magára, az assembly-re vonatkozó meta adatokat a korábbi verziókban egy AssemblyInfo.cs file-ban kellett leírni. A Visual Stúdió 2005-től már a PROJECT PROPERTIES részen szerkeszthetjük egy párbeszédablak-felületen az APPLICATION részen, az Assembly Information nyomógomb lenyomása után.
Mi az az attribútum
Az attribútum készítésekor gyakorlatilag egy speciális osztályt (attribútum-osztály) példányosítunk, bár nem hagyományos formában, hiszen ezen példányosítás nem a futó kód részben van írva, hanem a kódon kívül (osztályok előtt, metódusok előtt, stb.).
Például, létezik egy ObsoloteAttribute nevű osztály, melyet gyakran használunk figyelmeztető jelzések elhelyezésére kódon belül:
[Obsolote(”Ezen metódus elavult. Használd helyette a Print2-t!”)]
static void Print()
{
...
}
Ezzel azt jelezhetjük, hogy valamely korábban készített metódus elavult (obsoloted) változat lett valami oknál fogva. Amennyiben mégis valaki megpróbálná ezt a metódust használni a kódjában, akkor a fordító figyelmeztető üzenet formájában ki fogja a programozónak írni a megadott szöveget.
Ezen ObsoloteAttribute osztály formájában létezik, konstruktorának egy string paramétere van. Az megengedett, hogy ne kelljen a teljes nevét kiírni, hanem a név végéről az Attribute részt lehagyhatjuk.
Meta-adatok kiolvasása
A tárolt meta adatok (attribútumok) egy részét a C# fordító, és futtató rendszer figyeli és dolgozza fel. Ezek köre nem bővíthető.
Egyéb attribútumok csak tárolásra kerülnek. Ugyanakkor van lehetőség azokat futás közben lekérdezni:
Pl.: egy osztályhoz tartozó attribútumok listáját a typeof(<osztálynév>).GetCustomAttributes() függvény adja meg. Ez egy object[] vektort ad vissza, melyben a példányosított attribútumok vannak benne. Ezt feldolgozhatjuk egy foreach ciklussal, majd az elemeit az is operátorral megvizsgálhatjuk, hogy megtaláljunk egy keresett attribútum-példányt. Az as operátor segítségével típuskényszerítve hozzáférhetünk annak mezőihez.
Minden attribútumosztálynak más-más mezői vannak, amelyekből a tárolt adatok kinyerhetőek.