Ohjelmointi

Kuinka työskennellä attribuuttien kanssa C #: ssä

Attribuutit ovat tehokas ominaisuus C # -ohjelmointikielellä, joka voi lisätä metatietoja kokoonpanoihisi.

Attribuutti on itse asiassa objekti, joka liittyy mihinkään näistä elementeistä: Assembly, Class, Method, Delegate, Enum, Event, Field, Interface, Property ja Struct. Niitä voidaan käyttää yhdistämään deklaratiivisia tietoja - voit hakea tällaisia ​​tietoja ajon aikana myöhemmin, jos tarvitset tarvittaessa heijastusta. Toisin sanoen voit käyttää attribuutteja syöttämään lisätietoja kokoonpanoihin, joita voidaan kysyä ajon aikana tarvittaessa heijastamalla. Attribuutti käsittää sen nimen ja mahdollisesti luettelon parametreista. Määritteen nimi vastaa määriteluokkaa.

Voit hyödyntää määritteitä vahvistaaksesi sovelluksesi liikeobjektit. Määritteitä on kahta tyyppiä - sisäiset määritteet ja mukautetut määritteet. Ensimmäinen on saatavana osana .Net-kehystä, jälkimmäinen voidaan toteuttaa johtamalla luokka System.Attribute-luokasta. MSDN kertoo: "Attribuutti on osa ilmoitukselle määriteltäviä lisätietoja."

Mennään nyt johonkin koodiin. Vanhentunut-määritettä voidaan käyttää merkitsemään menetelmä vanhentuneeksi - sellaista, jota ei pitäisi enää käyttää, koska sitä ei enää tarvita tai sillä voi olla jokin muu vaihtoehto. Seuraava koodinpätkä kuvaa, kuinka voit käyttää Obsolete-määritettä metodideklaruksen päällä.

[Vanhentunut ("Tämä menetelmä on vanhentunut ...")]

julkinen staattinen tyhjä DoSomeWork ()

        {

// Joitakin koodeja

        }

Jos käytät tätä menetelmää koodissasi ja käännät ohjelmaa, Visual Studio IDE: n lähtöikkunassa näkyy varoitus. Joten, voit ohittaa tämän varoituksen, jos haluat. Entä jos haluat kehittäjiesi ei käyttävän tätä menetelmää ollenkaan? No, voit sitten käyttää toista parametria (se on kuitenkin valinnainen) samalla kun ilmoitat Vanhentunut-määritteen. Tässä on DoSomeWork () -menetelmän muokattu versio. Huomaa Boolen-parametrin käyttö tällä kertaa.

[Vanhentunut ("Tämä menetelmä on vanhentunut ...", totta)]

julkinen staattinen tyhjä DoSomeWork ()

        {

// Joitakin koodeja

        }                                                                                                                        

Kun välität "true" toisena valinnaisena parametrina tällä kertaa ja käännät ohjelman, koodi ei kääntyisi ollenkaan. Juuri sen halusit tehdä, eikö olekin?

Mukautetut määritteet

Tässä osiossa tutkitaan, miten voimme toteuttaa mukautettuja määritteitä. Mukautetut määritteet ovat luokkia, jotka perivät System.Attribute-luokan. Joten mukautetun attribuuttiluokan toteuttamiseksi luo uusi luokka ja johda se System.Attribute-luokkaan alla olevan kuvan mukaisesti.

käyttämällä järjestelmää;

public class CustomAttribute: Attribuutti

{

}

Voit hallita mukautettujen määritteiden käyttöä hyödyntämällä AttributeUsage-luokkaa. Tämä luokka sisältää ominaisuuksia, kuten ValidOn, AllowMultiple ja Inherited, joita voidaan käyttää muokatun attribuutin käytön hallintaan.

Seuraava koodinpätkä kuvaa muokattua versiota mukautetusta määriteluokastamme. Huomaa sellaisen konstruktorin käyttö, joka hyväksyy merkkijonon argumenttina ja määrittää sen luokan yksityiselle merkkijonolle. Tämä on vain havainnollistamistarkoituksessa.

[AttributeUsage (AttributeTargets.All)]

public class CustomAttribute: Attribuutti

    {

yksityinen merkkijonoteksti;

public CustomAttribute (merkkijonoteksti)

        {

this.Text = teksti;

        }

julkinen merkkijono Teksti

        {

saada

            {

palauta tämä.teksti;

            }

aseta

            {

tämä.teksti = arvo;

            }

        }

    }

Voit myös määrittää määritekohteet, joihin mukautettua määritettäsi tulisi käyttää. Näin voit tehdä sen.

[AttributeUsage (AttributeTargets.Class |

AttributeTargets.Constructor |

AttributeTargets.Field |

AttributeTargets.Method |

AttributeTargets.Property,

AllowMultiple = true)]

    public class CustomAttribute: Attribuutti

    {

yksityinen merkkijonoteksti;

public CustomAttribute (merkkijonoteksti)

        {

this.Text = teksti;

        }

julkinen merkkijono Teksti

        {

saada

            {

palauta tämä.teksti;

            }

aseta

            {

tämä.teksti = arvo;

            }

        }

    }

Voit nyt käyttää heijastusta näyttämään kaikki tietylle objektille määritetyt määritteet seuraavan koodinpätkän avulla.

MemberInfo memberInfo = typeof (CustomAttribute);

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

for (int i = 0, j = määritteet, pituus; i <j; i ++)

  {

Console.WriteLine (määritteet [i]);

  }

Harkitse nyt seuraavaa luokkaa, johon sovellamme mukautettua attribuuttiamme.

[CustomAttribute ("Hei maailma ...")]

julkinen luokka SomeClass

{

}

Huomaa, kuinka mukautettua määritettä on käytetty ja että teksti on välitetty sen argumentiksi. Seuraava koodinpätkä kuvaa, kuinka voit tulostaa Teksti-ominaisuuden sisällön.

MemberInfo memberInfo = typeof (SomeClass);

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

foreach (objekti-attribuutti määritteissä)

{

CustomAttribute customAttribute = määritteeksi CustomAttribute;

if (customAttribute! = null)

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

muu

Console.WriteLine ();

}