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
Öznitelikler (C# ve Visual Basic)
Özel Öznitelikler Oluşturma (C# ve Visual Basic)
Yansıma Kullanarak Özniteliklere Erişme (C# ve Visual Basic)