Programavimas

Kaip dirbti su atributais C #

Atributai yra galinga C # programavimo kalbos funkcija, kuri gali pridėti metaduomenų informaciją prie jūsų rinkinių.

Atributas iš tikrųjų yra objektas, susietas su bet kuriuo iš šių elementų: „Assembly“, „Class“, „Method“, „Delegate“, „Enum“, „Event“, „Field“, „Interface“, „Property“ ir „Struct“. Jie gali būti naudojami deklaratyviai informacijai susieti - jei reikia, naudodamiesi atspindžiu, tokią informaciją galite gauti vykdymo metu vėliau. Kitaip tariant, galite naudoti atributus, kad surinkimams pateikite papildomos informacijos, kurios, jei reikia, galite pateikti vykdymo metu, naudodamiesi atspindžiais. Atributą sudaro jo pavadinimas ir pasirinktinai parametrų sąrašas. Atributo pavadinimas atitinka atributų klasę.

Norėdami patvirtinti verslo objektus savo programoje, galite pasinaudoti atributais. Yra dviejų tipų atributai - vidiniai ir tinkinti atributai. Nors pirmasis yra prieinamas kaip .Net sistemos dalis, pastarąjį galima įgyvendinti išvedant klasę iš System.Attribute klasės. MSDN teigiama: "Atributas yra papildomos deklaratyvios informacijos dalis, nurodyta deklaracijai."

Dabar eikime į tam tikrą kodą. Atributas „Pasenęs“ gali būti naudojamas metodui pažymėti kaip pasenusiam - tokio, kurio nebereikėtų naudoti, nes jis nebereikalingas arba gali turėti kitą alternatyvą. Šis kodo fragmentas parodo, kaip metodo deklaracijos viršuje galite naudoti atributą „Pasenę“.

[Pasenęs („Šis metodas pasenęs ...“)]

public static void „DoSomeWork“ ()

        {

// Kažkas kodas

        }

Jei naudosite šį metodą savo kode ir sukursite programą, „Visual Studio IDE“ išvesties lange pamatysite įspėjimą. Taigi, jei norite, galite nepaisyti šio įspėjimo. Ką daryti, jei norite, kad jūsų kūrėjai apskritai nenaudotų šio metodo? Na, tada jūs galite naudoti antrąjį parametrą (nors jis yra neprivalomas), deklaruodami „Obsolete“ atributą. Štai modifikuota „DoSomeWork ()“ metodo versija. Atkreipkite dėmesį, kad šį kartą naudojamas loginis parametras.

[Pasenęs („Šis metodas pasenęs ...“, tiesa)]

public static void „DoSomeWork“ ()

        {

// Kažkas kodas

        }                                                                                                                        

Kai šį kartą perduosite „true“ kaip antrą pasirenkamą parametrą ir sukompiliuosite savo programą, kodas visiškai nebus kompiliuojamas. Tai ką norėjai padaryti, ar ne?

Tinkinti atributai

Šiame skyriuje mes išnagrinėsime, kaip galime įdiegti pasirinktinius atributus. Pasirinktiniai atributai yra klasės, paveldinčios sistemą. Atributų klasė. Taigi, norėdami įdiegti pasirinktinę atributų klasę, sukurkite naują klasę ir gaukite ją iš „System.Attribute“ klasės, kaip parodyta žemiau.

naudojant sistemą;

viešoji klasė „CustomAttribute“: atributas

{

}

Norėdami valdyti pasirinktinių atributų naudojimą, galite pasinaudoti „AttributeUsage“ klasės pranašumais. Šioje klasėje yra tokios savybės kaip „ValidOn“, „AllowMultiple“ ir „Paveldėta“, kurios gali būti naudojamos valdyti jūsų pasirinkto atributo naudojimą.

Šis kodo fragmentas iliustruoja modifikuotą mūsų tinkintų atributų klasės versiją. Atkreipkite dėmesį į konstruktoriaus, kuris priima eilutę kaip argumentą ir priskiria ją privačios eilutės nariui, naudojimą. Tai tik iliustracijos tikslais.

[AttributeUsage (AttributeTargets.All)]

viešoji klasė „CustomAttribute“: atributas

    {

privačios eilutės tekstas;

public CustomAttribute (eilutės tekstas)

        {

this.Text = tekstas;

        }

vieša eilutė Tekstas

        {

gauti

            {

grąžinti šį.tekstas;

            }

rinkinys

            {

tai.tekstas = reikšmė;

            }

        }

    }

Taip pat galite nurodyti taikomus atributus, kuriems turėtų būti pritaikytas jūsų tinkintas atributas. Štai kaip jūs galite tai padaryti.

[AttributeUsage (AttributeTargets.Class |

„AttributeTargets.Constructor“

„AttributeTargets.Field“

AttributeTargets.Method |

AttributeTargets.Property,

AllowMultiple = true)]

    viešoji klasė „CustomAttribute“: atributas

    {

privačios eilutės tekstas;

public CustomAttribute (eilutės tekstas)

        {

this.Text = tekstas;

        }

vieša eilutė Tekstas

        {

gauti

            {

grąžinti šį.tekstas;

            }

rinkinys

            {

tai.tekstas = reikšmė;

            }

        }

    }

Dabar galite naudoti atspindį, kad būtų rodomi visi atributai, taikomi tam tikram objektui naudojant šį kodo fragmentą.

MemberInfo memberInfo = typeof (CustomAttribute);

objekto [] atributai = memberInfo.GetCustomAttributes (true);

for (int i = 0, j = atributai. Ilgis; i <j; i ++)

  {

Console.WriteLine (atributai [i]);

  }

Dabar apsvarstykite šią klasę, kuriai pritaikytume savo pasirinktą atributą.

[„CustomAttribute“ („Sveikas pasaulis ...“)]

visuomenės klasė „SomeClass“

{

}

Atkreipkite dėmesį, kaip buvo naudojamas pasirinktas atributas ir kaip argumentas jam buvo perduotas tekstas. Šis kodo fragmentas parodo, kaip galite atsispausdinti ypatybės Tekstas turinį.

MemberInfo memberInfo = typeof (SomeClass);

objekto [] atributai = memberInfo.GetCustomAttributes (true);

foreach (objekto atributas atributuose)

{

CustomAttribute customAttribute = atributas kaip CustomAttribute;

if (customAttribute! = null)

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

Kitas

Console.WriteLine ();

}