Programiranje

Kako delati z atributi v jeziku C #

Atributi so zmogljiva funkcija v programskem jeziku C #, ki lahko vašim zbirkam doda informacije o metapodatkih.

Atribut je pravzaprav objekt, ki je povezan s katerim koli od teh elementov: Sestava, Razred, Metoda, Delegat, Enum, Dogodek, Polje, Vmesnik, Lastnost in Struktura. Uporabljajo se lahko za povezovanje deklarativnih informacij - take informacije lahko poiščete pozneje med izvajanjem, če je treba uporabiti razmislek. Z drugimi besedami, lahko z atributi vbrizgate dodatne informacije v sklope, ki jih je mogoče med izvajanjem poizvedovati po potrebi z uporabo odseva. Atribut vsebuje svoje ime in po želji seznam parametrov. Ime atributa ustreza razredu atributov.

Atribute lahko izkoristite za preverjanje veljavnosti poslovnih predmetov v vaši aplikaciji. Obstajata dve vrsti atributov - notranji atributi in atributi po meri. Medtem ko je prvi na voljo kot del ogrodja .Net, je drugega mogoče izvesti z izpeljavo razreda iz razreda System.Attribute. MSDN pravi: "Atribut je del dodatnih deklarativnih informacij, ki so podane za deklaracijo."

Pojdimo zdaj v neko kodo. Z zastarelim atributom lahko označimo metodo kot zastarelo - takšno, ki je ne bi smeli več uporabljati, saj ni več potrebna ali ima morda drugo alternativo. Naslednji delček kode prikazuje, kako lahko uporabite zastareli atribut na vrhu izjave metode.

[Zastarelo ("Ta metoda je zastarela ...")]

javna statična praznina DoSomeWork ()

        {

// Nekaj ​​kode

        }

Če uporabite to metodo v svoji kodi in prevedete program, se bo v izhodnem oknu Visual Studio IDE prikazalo opozorilo. Torej, če želite, lahko to opozorilo prezrete. Kaj pa, če želite, da vaši razvijalci sploh ne uporabljajo te metode? No, nato lahko med razglasitvijo zastarelega atributa uporabite drugi parameter (neobvezen). Tu je spremenjena različica metode DoSomeWork (). Tokrat opazite uporabo logičnega parametra.

[Zastarelo (»Ta metoda je zastarela ...«, resnično)]

javna statična praznina DoSomeWork ()

        {

// Nekaj ​​kode

        }                                                                                                                        

Ko tokrat kot drugi neobvezni parameter prenesete "true" in prevedete program, se koda sploh ne prevede. To si hotel narediti, kajne?

Atributi po meri

V tem poglavju bomo raziskali, kako lahko uporabimo atribute po meri. Atributi po meri so razredi, ki podedujejo razred System.Attribute. Torej, da implementirate razred atributov po meri, ustvarite nov razred in ga pridobite iz razreda System.Attribute, kot je prikazano spodaj.

z uporabo sistema;

javni razred CustomAttribute: Atribut

{

}

Če želite nadzorovati uporabo atributov po meri, lahko izkoristite razred AttributeUsage. Ta razred vsebuje lastnosti, kot so ValidOn, AllowMultiple in Inherited, ki jih lahko uporabite za nadzor uporabe vašega atributa po meri.

Naslednji delček kode prikazuje spremenjeno različico našega razreda atributov po meri. Upoštevajte uporabo konstruktorja, ki kot argument sprejme niz in ga dodeli članu zasebnega niza razreda. To je samo za ponazoritev.

[AttributeUsage (AttributeTargets.All)]

javni razred CustomAttribute: Atribut

    {

besedilo zasebnega niza;

javni CustomAttribute (besedilo niza)

        {

this.Text = besedilo;

        }

javni niz Besedilo

        {

dobili

            {

vrni this.text;

            }

nastavite

            {

this.text = vrednost;

            }

        }

    }

Določite lahko tudi cilje atributov, na katere naj bo uporabljen vaš atribut po meri. Evo, kako to lahko storite.

[AttributeUsage (AttributeTargets.Class |

AttributeTargets.Constructor |

AttributeTargets.Field |

AttributeTargets.Method |

AttributeTargets.Property,

AllowMultiple = true)]

    javni razred CustomAttribute: Atribut

    {

besedilo zasebnega niza;

javni CustomAttribute (besedilo niza)

        {

this.Text = besedilo;

        }

javni niz Besedilo

        {

dobili

            {

vrni this.text;

            }

nastavite

            {

this.text = vrednost;

            }

        }

    }

Zdaj lahko z odsevom prikažete vse atribute, ki so uporabljeni za določen predmet, z naslednjim delčkom kode.

MemberInfo memberInfo = typeof (CustomAttribute);

object [] attributes = memberInfo.GetCustomAttributes (true);

za (int i = 0, j = atributi. dolžina; i <j; i ++)

  {

Console.WriteLine (atributi [i]);

  }

Zdaj razmislite o naslednjem razredu, v katerem bi uporabili svoj atribut po meri.

[CustomAttribute ("Hello World ...")]

javni razred SomeClass

{

}

Upoštevajte, kako je bil uporabljen atribut po meri, besedilo pa mu je bilo posredovano kot argument. Naslednji delček kode prikazuje, kako lahko natisnete vsebino lastnosti Text.

MemberInfo memberInfo = typeof (SomeClass);

object [] attributes = memberInfo.GetCustomAttributes (true);

foreach (atribut objekta v atributih)

{

CustomAttribute customAttribute = atribut kot CustomAttribute;

če (customAttribute! = null)

Console.WriteLine ("Text = {0}", customAttribute.Text);

drugače

Console.WriteLine ();

}