Attribut ist nur ein Weg zusätzliche Informationen (Metadaten) zu der Klasse, Struktur oder ein Mitglied hinzuzufügen. Diese Metadaten könnten von anderem Code abgerufen werden, um einige Entscheidungen zu treffen.
Einfachstes Beispiel ist SerializableAttribute von der .NET. Es zeigt an, dass die Klasse später von einem BinaryFormatter serialisiert werden konnte.
Hier ein weiteres Beispiel - wir einige Klassen in unserem Code mit ImmutableAttribute markieren könnten, um anzuzeigen, dass sie keine änderbaren Felder und OK sind für Multi-Threaded-Operationen:
[Immutable]
public sealed class ProcessingMessage
{
//... some code that should be thread-safe
}
Dann wir könnte einen Komponententest erstellen, der alle Klassen mit dem Attribut findet und dafür sorgt, dass they are immutable indeed:
[Test]
public void Immutable_Types_Should_Be_Immutable()
{
var decorated = GlobalSetup.Types
.Where(t => t.Has<ImmutableAttribute>());
foreach (var type in decorated)
{
var count = type.GetAllFields().Count(f => !f.IsInitOnly && !f.IsStatic);
Assert.AreEqual(0, count, "Type {0} should be immutable", type);
}
}