Özel öznitelikleri oluşturma

Meta verilerdeki öznitelik tanımlarını tanımlamayı hızlı ve kolay hale getiren, doğrudan veya dolaylı olarak öğesinden Attributetüretilen bir sınıf olan öznitelik sınıfını tanımlayarak kendi özel özniteliklerinizi oluşturabilirsiniz. Türleri, türü yazan programcının adıyla etiketlemek istediğinizi varsayalım. Özel Author bir öznitelik sınıfı tanımlayabilirsiniz:

[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;
    }
}

Sınıf adı AuthorAttribute özniteliğin AuthorAttribute adı ve sonektir. öğesinden System.Attributetüretilir, bu nedenle özel bir öznitelik sınıfıdır. Oluşturucunun parametreleri, özel özniteliğin konumsal parametreleridir. Bu örnekte, name konumsal bir parametredir. Tüm genel okuma-yazma alanları veya özellikleri parametre olarak adlandırılır. Bu durumda, version tek adlandırılmış parametredir. özniteliğini AttributeUsage yalnızca sınıf ve struct bildirimlerde geçerli hale getirmek için özniteliğinin Author kullanımına dikkat edin.

Bu yeni özniteliği aşağıdaki gibi kullanabilirsiniz:

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

AttributeUsage , AllowMultipleözel bir özniteliği tek kullanımlı veya çok kullanımlı hale getirebileceğiniz adlandırılmış bir parametresine sahiptir. Aşağıdaki kod örneğinde çok kullanımlı bir öznitelik oluşturulur.

[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;
}

Aşağıdaki kod örneğinde, aynı türdeki birden çok öznitelik bir sınıfa uygulanır.

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

Ayrıca bkz.