Udostępnij za pośrednictwem


Utwórz atrybuty niestandardowe

Możesz utworzyć własne atrybuty niestandardowe, definiując klasę atrybutów, klasę, która pochodzi bezpośrednio lub pośrednio z Attributeklasy , co sprawia, że identyfikowanie definicji atrybutów w metadanych jest szybkie i łatwe. Załóżmy, że chcesz oznaczyć typy tagami o nazwie programisty, który napisał typ. Możesz zdefiniować niestandardową Author klasę atrybutów:

[System.AttributeUsage(System.AttributeTargets.Class |
                       System.AttributeTargets.Struct)
]
public class AuthorAttribute : System.Attribute
{
    private string Name;
    public double Version;

    public AuthorAttribute(string name)
    {
        Name = name;
        Version = 1.0;
    }
}

Nazwa AuthorAttribute klasy jest nazwą atrybutu , Authororaz sufiksem Attribute . Pochodzi ona z System.Attributeklasy , więc jest to klasa atrybutów niestandardowych. Parametry konstruktora to parametry pozycyjne atrybutu niestandardowego. W tym przykładzie name jest parametrem pozycyjnym. Wszystkie publiczne pola odczytu i zapisu lub właściwości mają nazwane parametry. W tym przypadku version jest jedynym nazwanym parametrem. Zwróć uwagę na użycie atrybutu AttributeUsage , aby Author atrybut był prawidłowy tylko dla klas i struct deklaracji.

Możesz użyć tego nowego atrybutu w następujący sposób:

[Author("P. Ackerman", Version = 1.1)]
class SampleClass
{
    // P. Ackerman's code goes here...
}

AttributeUsage ma nazwany parametr , AllowMultipleza pomocą którego można utworzyć atrybut niestandardowy z pojedynczym użyciem lub wieloma zastosowaniami. W poniższym przykładzie kodu jest tworzony atrybut wieloużytkowy.

[System.AttributeUsage(System.AttributeTargets.Class |
                       System.AttributeTargets.Struct,
                       AllowMultiple = true)  // Multiuse attribute.
]
public class AuthorAttribute : System.Attribute
{
    string Name;
    public double Version;

    public AuthorAttribute(string name)
    {
        Name = name;

        // Default value.
        Version = 1.0;
    }

    public string GetName() => Name;
}

W poniższym przykładzie kodu do klasy są stosowane wiele atrybutów tego samego typu.

[Author("P. Ackerman"), Author("R. Koch", Version = 2.0)]
public class ThirdClass
{
    // ...
}

Zobacz także