Aracılığıyla paylaş


AttributeUsage (C# ve Visual Basic)

Özel öznitelik sınıfı nasıl kullanılabileceğini belirler.AttributeUsageYeni bir öznitelik nasıl uygulanabilir denetlemek için özel öznitelik tanımlarını uygulanabilir bir özniteliktir.Varsayılan ayarları uygulandığında açıkça şöyle:

    <System.AttributeUsage(System.AttributeTargets.All, 
                       AllowMultiple:=False, 
                       Inherited:=True)> 
    Class NewAttribute
        Inherits System.Attribute
    End Class
[System.AttributeUsage(System.AttributeTargets.All,
                   AllowMultiple = false,
                   Inherited = true)]
class NewAttribute : System.Attribute { }

Bu örnekte, NewAttribute sınıfı olabilir herhangi bir öznitelik mümkün kod varlık uygulanır, ancak her varlığın yalnızca bir kez uygulanabilir.Bir temel sınıf uygulandığında türetilmiş sınıflar tarafından miras alınır.

AllowMultiple Ve Inherited değişkenlerdir isteğe bağlı, bu kodu aynı etkiye sahiptir:

<System.AttributeUsage(System.AttributeTargets.All)> 
Class NewAttribute
    Inherits System.Attribute
End Class
[System.AttributeUsage(System.AttributeTargets.All)]
class NewAttribute : System.Attribute { }

İlk AttributeUsage bağımsız değişkeni, bir veya daha fazla öğe olması gerekir AttributeTargets numaralandırma.Birden çok hedef türler aþaðýdaki veya işleci ile birlikte bağlanabilir:

Imports System


...


<AttributeUsage(AttributeTargets.Property Or AttributeTargets.Field)> 
Class NewPropertyOrFieldAttribute
    Inherits Attribute
End Class
using System;


...


[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
class NewPropertyOrFieldAttribute : Attribute { }

AllowMultiple Bağımsız değişkeni ayarlanır true, sonra da ortaya çıkan özniteliği birden fazla kez böyle tek bir varlık uygulanabilir:

Imports System


...


    <AttributeUsage(AttributeTargets.Class, AllowMultiple:=True)> 
    Class MultiUseAttr
        Inherits Attribute
    End Class

    <MultiUseAttr(), MultiUseAttr()> 
    Class Class1
    End Class
using System;


...


[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
class MultiUseAttr : Attribute { }

[MultiUseAttr]
[MultiUseAttr]
class Class1 { }

[MultiUseAttr, MultiUseAttr]
class Class2 { }

Bu durumda MultiUseAttr tekrar tekrar çünkü uygulanabilir AllowMultiple ayarlamak true.Birden çok öznitelik uygulamak için gösterilen iki biçimi geçerli değil.

Inherited Ayarlamak false, öznitelik yazarından sınıfından türetilmiş sınıflar tarafından miras sonra.Örne?in:

Imports System


...


<AttributeUsage(AttributeTargets.Class, Inherited:=False)> 
Class Attr1
    Inherits Attribute
End Class

<Attr1()> 
Class BClass

End Class   

Class DClass
    Inherits BClass
End Class
using System;


...


[AttributeUsage(AttributeTargets.Class, Inherited = false)]
class Attr1 : Attribute { }

[Attr1]
class BClass { }

class DClass : BClass { }

Bu durumda Attr1 uygulanmaz DClass kalıtım yoluyla.

Notlar

AttributeUsage Özniteliği, bir tek kullanım özniteliği--birden çok kez aynı sınıfa uygulanamaz.AttributeUsage seçeneği AttributeUsageAttribute için bir eş addır.

Daha fazla bilgi için bkz. Yansıma Kullanarak Özniteliklere Erişme (C# ve Visual Basic).

Örnek

Etkisini aşağıdaki örnekte gösterilmiştir Inherited ve AllowMultiple bağımsız AttributeUsage özniteliği ve nasıl bir sýnýfa uygulanan özel öznitelikleri listelenebilir.

Imports System


...


    ' Create some custom attributes:
    <AttributeUsage(System.AttributeTargets.Class, Inherited:=False)> 
    Class A1
        Inherits System.Attribute
    End Class

    <AttributeUsage(System.AttributeTargets.Class)> 
    Class A2
        Inherits System.Attribute
    End Class    

    <AttributeUsage(System.AttributeTargets.Class, AllowMultiple:=True)> 
    Class A3
        Inherits System.Attribute
    End Class 


    ' Apply custom attributes to classes:
    <A1(), A2()> 
    Class BaseClass

    End Class

    <A3(), A3()> 
    Class DerivedClass
        Inherits BaseClass
    End Class 


    Public Class TestAttributeUsage
        Sub Main()
            Dim b As New BaseClass
            Dim d As New DerivedClass
            ' Display custom attributes for each class.
            Console.WriteLine("Attributes on Base Class:")
            Dim attrs() As Object = b.GetType().GetCustomAttributes(True)

            For Each attr In attrs
                Console.WriteLine(attr)
            Next

            Console.WriteLine("Attributes on Derived Class:")
            attrs = d.GetType().GetCustomAttributes(True)
            For Each attr In attrs
                Console.WriteLine(attr)
            Next             
        End Sub 
    End Class
using System;


...


// Create some custom attributes:
[AttributeUsage(System.AttributeTargets.Class, Inherited = false)]
class A1 : System.Attribute { }

[AttributeUsage(System.AttributeTargets.Class)]
class A2 : System.Attribute { }

[AttributeUsage(System.AttributeTargets.Class, AllowMultiple = true)]
class A3 : System.Attribute { }

// Apply custom attributes to classes:
[A1, A2]
class BaseClass { }

[A3, A3]
class DerivedClass : BaseClass { }

public class TestAttributeUsage
{
    static void Main()
    {
        BaseClass b = new BaseClass();
        DerivedClass d = new DerivedClass();

        // Display custom attributes for each class.
        Console.WriteLine("Attributes on Base Class:");
        object[] attrs = b.GetType().GetCustomAttributes(true);
        foreach (Attribute attr in attrs)
        {
            Console.WriteLine(attr);
        }

        Console.WriteLine("Attributes on Derived Class:");
        attrs = d.GetType().GetCustomAttributes(true);
        foreach (Attribute attr in attrs)
        {
            Console.WriteLine(attr);
        }
    }
}

Örnek Çıktı

Attributes on Base Class:
A1
A2
Attributes on Derived Class:
A3
A3
A2

Ayrıca bkz.

Başvuru

Yansıma (C# ve Visual Basic)

Öznitelikler (C# ve Visual Basic)

Özel Öznitelikler Oluşturma (C# ve Visual Basic)

Yansıma Kullanarak Özniteliklere Erişme (C# ve Visual Basic)

Attribute

System.Reflection

Kavramlar

C# Programlama Kılavuzu

Diğer Kaynaklar

Visual Basic Programlama Kılavuzu

Öznitelikleri Kullanarak Meta Verileri Genişletme