Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 , Author
oraz sufiksem Attribute
. Pochodzi ona z System.Attribute
klasy , 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 , AllowMultiple
za 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
{
// ...
}