Programování

Jak pracovat s atributy v C #

Atributy jsou výkonnou funkcí v programovacím jazyce C #, která může do vašich sestav přidat informace o metadatech.

Atribut je ve skutečnosti objekt, který je přidružen k některému z těchto prvků: Assembly, Class, Method, Delegate, Enum, Event, Field, Interface, Property and Struct. Lze je použít k přidružení deklarativních informací - tyto informace můžete načíst za běhu v pozdějším okamžiku, pokud je třeba použít reflexi. Jinými slovy můžete použít atributy k vložení dalších informací do sestav, které lze v případě potřeby dotazovat za běhu pomocí reflexe. Atribut se skládá z názvu a volitelně ze seznamu parametrů. Název atributu odpovídá třídě atributů.

Atributy můžete využít k ověření obchodních objektů ve vaší aplikaci. Existují dva typy atributů - vnitřní atributy a vlastní atributy. Zatímco první je k dispozici jako součást .Net framework, druhý lze implementovat odvozením třídy ze třídy System.Attribute. MSDN uvádí: "Atribut je část dodatečné deklarativní informace, která je určena pro deklaraci."

Pojďme nyní do nějakého kódu. Atribut Zastaralé lze použít k označení metody jako zastaralé - takové, která by se již neměla používat, protože již není potřeba, nebo může mít jinou alternativu. Následující fragment kódu ukazuje, jak můžete použít zastaralý atribut nad deklarací metody.

[Zastaralé („Tato metoda je zastaralá ...“)]

public static void DoSomeWork ()

        {

// Nějaký kód

        }

Pokud použijete tuto metodu ve svém kódu a zkompilujete svůj program, zobrazí se varování zobrazené ve výstupním okně Visual Studio IDE. Pokud chcete, můžete toto varování ignorovat. Co když chcete, aby vývojáři tuto metodu vůbec nepoužívali? Potom můžete použít druhý parametr (je však volitelný) při deklaraci atributu Zastaralé. Tady je upravená verze metody DoSomeWork (). Tentokrát si všimněte použití booleovského parametru.

[Zastaralé („Tato metoda je zastaralá ...“, pravda)]

public static void DoSomeWork ()

        {

// Nějaký kód

        }                                                                                                                        

Když tentokrát předáte „true“ jako druhý volitelný parametr a zkompilujete program, kód by se vůbec nezkompiloval. To jste chtěli udělat, že?

Vlastní atributy

V této části prozkoumáme, jak můžeme implementovat vlastní atributy. Vlastní atributy jsou třídy, které dědí třídu System.Attribute. Chcete-li implementovat vlastní třídu atributů, vytvořte novou třídu a odvodte ji ze třídy System.Attribute, jak je znázorněno níže.

pomocí systému;

veřejná třída CustomAttribute: Atribut

{

}

Chcete-li řídit použití vlastních atributů, můžete využít třídu AttributeUsage. Tato třída obsahuje vlastnosti jako ValidOn, AllowMultiple a Inherited, které lze použít k řízení použití vašeho vlastního atributu.

Následující fragment kódu ilustruje upravenou verzi naší vlastní třídy atributů. Všimněte si použití konstruktoru, který přijímá řetězec jako argument a přiřadí jej soukromému řetězci členovi třídy. Je to pouze pro ilustraci.

[AttributeUsage (AttributeTargets.All)]

veřejná třída CustomAttribute: Atribut

    {

soukromý text řetězce;

public CustomAttribute (text řetězce)

        {

this.Text = text;

        }

veřejný řetězec Text

        {

dostat

            {

vrátit this.text;

            }

soubor

            {

this.text = hodnota;

            }

        }

    }

Můžete také určit cíle atributů, na které by měl být použit váš vlastní atribut. Zde je návod, jak to udělat.

[AttributeUsage (AttributeTargets.Class |

AttributeTargets.Constructor |

AttributeTargets.Field |

AttributeTargets.Method |

AttributeTargets.Property,

AllowMultiple = true)]

    veřejná třída CustomAttribute: Atribut

    {

soukromý text řetězce;

public CustomAttribute (text řetězce)

        {

this.Text = text;

        }

veřejný řetězec Text

        {

dostat

            {

vrátit this.text;

            }

soubor

            {

this.text = hodnota;

            }

        }

    }

Nyní můžete pomocí reflexe zobrazit všechny atributy, které jsou aplikovány na konkrétní objekt, pomocí následujícího fragmentu kódu.

MemberInfo memberInfo = typeof (CustomAttribute);

atributy objektu [] = memberInfo.GetCustomAttributes (true);

pro (int i = 0, j = atributy. Délka; i <j; i ++)

  {

Console.WriteLine (atributy [i]);

  }

Nyní zvažte následující třídu, na kterou bychom použili náš vlastní atribut.

[CustomAttribute („Hello World ...“)]

veřejná třída SomeClass

{

}

Všimněte si, jak byl použit vlastní atribut a text předán jako argument. Následující fragment kódu ukazuje, jak můžete vytisknout obsah vlastnosti Text.

MemberInfo memberInfo = typeof (SomeClass);

atributy objektu [] = memberInfo.GetCustomAttributes (true);

foreach (atribut objektu v atributech)

{

CustomAttribute customAttribute = atribut jako CustomAttribute;

if (customAttribute! = null)

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

jiný

Console.WriteLine ();

}