Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Visual Basic dili, programcının bildirilen varlıklar hakkındaki bilgileri temsil eden bildirimlerde değiştiriciler belirtmesini sağlar. Örneğin, bir sınıf yöntemini , , ProtectedFriend, Protected Friendveya Private değiştiricileriyle Publicyapıştırarak erişilebilirliğini belirtir.
Visual Basic, dil tarafından tanımlanan değiştiricilere ek olarak, programcıların öznitelik olarak adlandırılan yeni değiştiriciler oluşturmasına ve bunları yeni varlıklar bildirirken kullanmasına da olanak tanır. Öznitelik sınıflarının bildirimiyle tanımlanan bu yeni değiştiriciler daha sonra öznitelik blokları aracılığıyla varlıklara atanır.
Not. Öznitelikler çalışma zamanında .NET Framework'ün yansıma API'leri aracılığıyla alınabilir. Bu API'ler bu belirtim kapsamının dışındadır.
Örneğin, bir çerçeve, aşağıdaki örnekte gösterildiği gibi, program öğelerinden belgelere eşleme sağlamak için sınıflar ve yöntemler gibi program öğelerine yerleştirilebilen bir öznitelik tanımlayabilir Help :
<AttributeUsage(AttributeTargets.All)> _
Public Class HelpAttribute
Inherits Attribute
Public Sub New(urlValue As String)
Me.UrlValue = urlValue
End Sub
Public Topic As String
Private UrlValue As String
Public ReadOnly Property Url() As String
Get
Return UrlValue
End Get
End Property
End Class
Örnek, bir konumsal parametresi () ve bir adlandırılmış bağımsız değişkeniTopic (UrlValue) olan , veya Help kısaca adlı bir öznitelik sınıfını HelpAttributetanımlar.
Sonraki örnekte özniteliğinin çeşitli kullanımları gösterilmektedir:
<Help("http://www.example.com/.../Class1.htm")> _
Public Class Class1
<Help("http://www.example.com/.../Class1.htm", Topic:="F")> _
Public Sub F()
End Sub
End Class
Sonraki örnek bir Help özniteliği olup olmadığını Class1 denetler ve öznitelik mevcutsa ilişkili Topic ve Url değerleri yazar.
Module Test
Sub Main()
Dim type As Type = GetType(Class1)
Dim arr() As Object = _
type.GetCustomAttributes(GetType(HelpAttribute), True)
If arr.Length = 0 Then
Console.WriteLine("Class1 has no Help attribute.")
Else
Dim ha As HelpAttribute = CType(arr(0), HelpAttribute)
Console.WriteLine("Url = " & ha.Url & ", Topic = " & ha.Topic)
End If
End Sub
End Module
Öznitelik Sınıfları
Öznitelik sınıfı, öğesinden System.Attribute türetilen ve olmayan MustInheritgenel olmayan bir sınıftır. Öznitelik sınıfı, özniteliğin ne üzerinde geçerli olduğunu, bir System.AttributeUsage bildirimde birden çok kez kullanılıp kullanılamayacağını ve devralınıp alınmadığını bildiren bir özniteliğine sahip olabilir. Aşağıdaki örnek, sınıf bildirimlerine ve arabirim bildirimlerine yerleştirilebilen adlı SimpleAttribute bir öznitelik sınıfı tanımlar:
<AttributeUsage(AttributeTargets.Class Or AttributeTargets.Interface)> _
Public Class SimpleAttribute
Inherits System.Attribute
End Class
Sonraki örnekte özniteliğinin birkaç kullanım alanı gösterilmektedir Simple . Öznitelik sınıfı olarak adlandırılmış SimpleAttributeolsa da, bu özniteliğin kullanımları son eki atlayarak Attribute adı olarak Simplekısaltabilir:
<Simple> Class Class1
End Class
<Simple> Interface Interface1
End Interface
özniteliğinde bir yoksa, özniteliği herhangi bir System.AttributeUsagehedefe (eşdeğeri AttributeTargets.All) yerleştirilebilir. özniteliği, System.AttributeUsageAllowMultiplebelirtilen özniteliğin belirli bir bildirim için birden çok kez belirtilip belirtilemeyeceğini belirten değişken başlatıcıya sahiptir.
AllowMultiple Bir öznitelik için iseTrue, çok kullanımlı bir öznitelik sınıfıdır ve bir bildirimde birden çok kez belirtilebilir. Bir öznitelik için bir öznitelik False için belirtilmemişseAllowMultiple, tek kullanımlık bir öznitelik sınıfıdır ve bir bildirimde en fazla bir kez belirtilebilir.
Aşağıdaki örnek adlı AuthorAttributeçok kullanımlı bir öznitelik sınıfını tanımlar:
<AttributeUsage(AttributeTargets.Class, AllowMultiple:=True)> _
Public Class AuthorAttribute
Inherits System.Attribute
Private _Value As String
Public Sub New(value As String)
Me._Value = value
End Sub
Public ReadOnly Property Value() As String
Get
Return _Value
End Get
End Property
End Class
Örnekte özniteliğinin iki kullanımlı bir sınıf bildirimi gösterilmektedir Author :
<Author("Maria Hammond"), Author("Ramesh Meyyappan")> _
Class Class1
End Class
özniteliği, System.AttributeUsageInheritedbir temel tür üzerinde belirtildiğinde özniteliğin bu temel türden türetilen türler tarafından da devralınıp devralınmadığını belirten bir ortak örnek değişkenine sahiptir.
Inherited Ortak örnek değişkeni başlatılmazsa, varsayılan değeri False kullanılır. Özellikler ve olaylar tarafından tanımlanan yöntemler olsa da, özellikler ve olaylar öznitelikleri devralmaz. Arabirimler öznitelikleri devralmıyor.
Tek kullanımlık bir öznitelik türetilmiş bir tür üzerinde hem devralınmış hem de belirtilmişse, türetilmiş tür üzerinde belirtilen öznitelik devralınan özniteliği geçersiz kılar. Birden çok kullanımlı bir öznitelik türetilmiş bir tür üzerinde hem devralınmış hem de belirtilmişse, her iki öznitelik de türetilmiş türde belirtilir. Örneğin:
<AttributeUsage(AttributeTargets.Class, AllowMultiple:=True, _
Inherited:=True) > _
Class MultiUseAttribute
Inherits System.Attribute
Public Sub New(value As Boolean)
End Sub
End Class
<AttributeUsage(AttributeTargets.Class, Inherited:=True)> _
Class SingleUseAttribute
Inherits Attribute
Public Sub New(value As Boolean)
End Sub
End Class
<SingleUse(True), MultiUse(True)> Class Base
End Class
' Derived has three attributes defined on it: SingleUse(False),
' MultiUse(True) and MultiUse(False)
<SingleUse(False), MultiUse(False)> _
Class Derived
Inherits Base
End Class
özniteliğinin konumsal parametreleri, öznitelik sınıfının ortak oluşturucularının parametreleri tarafından tanımlanır. Konumsal parametreler olmalıdır ByVal ve belirtmeyebilir ByRef. Genel örnek değişkenleri ve özellikleri, öznitelik sınıfının genel okuma-yazma özellikleri veya örnek değişkenleri tarafından tanımlanır. Konumsal parametrelerde ve genel örnek değişkenlerinde ve özelliklerinde kullanılabilecek türler öznitelik türleriyle sınırlıdır. Tür, aşağıdakilerden biriyse bir öznitelik türüdür:
ve
DecimaldışındaDateherhangi bir ilkel tür.türü
Object.türü
System.Type.Numaralandırılmış bir tür, bu türün ve iç içe yerleştirildiği türlerin (varsa) erişilebilirliği olması
Publickoşuluyla.Bu listedeki önceki türlerden birinin tek boyutlu dizisi.
Öznitelik Blokları
Öznitelikler öznitelik bloklarında belirtilir. Her öznitelik bloğu açılı ayraçlarla ("<>") sınırlandırılır ve birden çok öznitelik, bir öznitelik bloğu içinde veya birden çok öznitelik bloğunda virgülle ayrılmış bir listede belirtilebilir. Özniteliklerin belirtilme sırası önemli değildir. Örneğin , ve <B> <A> öznitelik bloklarının <A, B><B, A><A> <B> tümü eşdeğerdir.
Attributes
: AttributeBlock+
;
AttributeBlock
: LineTerminator? '<' AttributeList LineTerminator? '>' LineTerminator?
;
AttributeList
: Attribute ( Comma Attribute )*
;
Attribute
: ( AttributeModifier ':' )? SimpleTypeName
( OpenParenthesis AttributeArguments? CloseParenthesis )?
;
AttributeModifier
: 'Assembly' | 'Module'
;
Öznitelik, desteklemediği bir tür bildirimde belirtilmeyebilir ve tek kullanımlık öznitelikler bir öznitelik bloğunda birden çok kez belirtilmeyebilir. Aşağıdaki örnek, hem arabiriminde Interface1 hem de bildiriminde birden çok kez kullanmaya HelpString çalıştığından hatalara Class1neden olur.
<AttributeUsage(AttributeTargets.Class)> _
Public Class HelpStringAttribute
Inherits System.Attribute
Private InternalValue As String
Public Sub New(value As String)
Me.InternalValue = value
End Sub
Public ReadOnly Property Value() As String
Get
Return InternalValue
End Get
End Property
End Class
' Error: HelpString only applies to classes.
<HelpString("Description of Interface1")> _
Interface Interface1
Sub Sub1()
End Interface
' Error: HelpString is single-use.
<HelpString("Description of Class1"), _
HelpString("Another description of Class1")> _
Public Class Class1
End Class
Öznitelik isteğe bağlı bir öznitelik değiştirici, öznitelik adı, isteğe bağlı konumsal bağımsız değişkenler listesi ve değişken/özellik başlatıcılardan oluşur. Parametre veya başlatıcı yoksa, ayraç atlanabilir. Bir özniteliğin değiştiricisi varsa, kaynak dosyanın en üstündeki öznitelik bloğunda olmalıdır.
Kaynak dosya, dosyanın en üstünde, kaynak dosyayı içerecek derleme veya modül özniteliklerini belirten bir öznitelik bloğu içeriyorsa, öznitelik bloğundaki her özniteliğin hem veya Module değiştiricisi Assembly hem de iki nokta üst üste ekli olması gerekir.
Öznitelik Adları
Özniteliğin adı bir öznitelik sınıfını belirtir. Kurala göre, öznitelik sınıfları soneki Attributeile adlandırılır. Bir özniteliğin kullanımları bu son eki içerebilir veya atlar. Sonuç olarak, öznitelik tanımlayıcısına karşılık gelen bir öznitelik sınıfının adı, tanımlayıcının kendisi veya nitelenmiş tanımlayıcının ve Attributebirleştirmesi olur. Derleyici bir öznitelik adını çözümlediğinde, adın sonuna eklenir Attribute ve aramayı dener. Bu arama başarısız olursa, derleyici sonek olmadan aramayı dener. Örneğin, bir öznitelik sınıfının SimpleAttribute kullanımları soneki Attribute atlayarak adı olarak Simplekısaltabilir:
<Simple> Class Class1
End Class
<Simple> Interface Interface1
End Interface
Yukarıdaki örnek, aşağıdakine eşdeğerdir:
<SimpleAttribute> Class Class1
End Class
<SimpleAttribute> Interface Interface1
End Interface
Genel olarak, sonek Attribute ile adlı öznitelikler tercih edilir. Aşağıdaki örnekte ve T``Attributeadlı T iki öznitelik sınıfı gösterilmektedir.
<AttributeUsage(AttributeTargets.All)> _
Public Class T
Inherits System.Attribute
End Class
<AttributeUsage(AttributeTargets.All)> _
Public Class TAttribute
Inherits System.Attribute
End Class
' Refers to TAttribute.
<T> Class Class1
End Class
' Refers to TAttribute.
<TAttribute> Class Class2
End Class
Hem öznitelik bloğu <T> hem de öznitelik bloğu <TAttribute> adlı TAttributeöznitelik sınıfına başvurur. sınıfı TAttributeiçin bildirimini kaldırana kadar öznitelik olarak kullanmak T mümkün değildir.
Öznitelik Bağımsız Değişkenleri
Bir özniteliğin bağımsız değişkenleri iki biçim alabilir: konumsal bağımsız değişkenler ve örnek değişkeni/özellik başlatıcıları. Özniteliğine yönelik tüm konumsal bağımsız değişkenler, örnek değişkeni/özellik başlatıcılarından önce gelmelidir. Konumsal bağımsız değişken bir sabit ifade, tek boyutlu dizi oluşturma ifadesi veya ifadeden GetType oluşur. Örnek değişkeni/özellik başlatıcısı, anahtar sözcükleri eşleştirebilen, ardından iki nokta üst üste ve eşittir işareti bulunan ve sabit bir ifade veya ifade tarafından sonlandırılan bir GetType tanımlayıcıdan oluşur.
Öznitelik sınıfı T, konumsal bağımsız değişken listesi ve örnek değişkeni/özellik başlatıcı listesi PNolan bir öznitelik verildiğinde, bu adımlar bağımsız değişkenlerin geçerli olup olmadığını belirler:
formunun
New T(P)bir ifadesini derlemek için derleme zamanı işleme adımlarını izleyin. Bu, derleme zamanı hatasıyla sonuçlanır veya bağımsız değişken listesi için en uygun olan üzerindekiTbir oluşturucuyu belirler.1. adımda belirlenen oluşturucunun öznitelik türü olmayan veya bildirim sitesinde erişilemeyen parametreleri varsa, derleme zamanı hatası oluşur.
içindeki
Nher örnek değişkeni/özellik başlatıcısıArgiçin, örnek değişkeninin/özellik başlatıcısınınArgtanımlayıcısı olmalıdırName.Nametürü öznitelik türü olan, yazılabilir olmayanShared,Publicörnek değişkeni veya parametresiz bir özellikTtanımlamalıdır. Böyle bir örnek değişkeni veya özelliği yoksaTderleme zamanı hatası oluşur.
Örneğin:
<AttributeUsage(AttributeTargets.All)> _
Public Class GeneralAttribute
Inherits Attribute
Public Sub New(x As Integer)
End Sub
Public Sub New(x As Double)
End Sub
Public y As Type
Public Property z As Integer
Get
End Get
Set
End Set
End Property
End Class
' Calls the first constructor.
<General(10, z:=30, y:=GetType(Integer))> _
Class C1
End Class
' Calls the second constructor.
<General(10.5, z:=10)> _
Class C2
End Class
Tür parametreleri öznitelik bağımsız değişkenlerinde hiçbir yerde kullanılamaz. Ancak, oluşturulan türler kullanılabilir:
<AttributeUsage(AttributeTargets.All)> _
Class A
Inherits System.Attribute
Public Sub New(t As Type)
End Sub
End Class
Class List(Of T)
' Error: attribute argument cannot use type parameter
<A(GetType(T))> Dim t1 As T
' OK: closed type
<A(GetType(List(Of Integer)))> Dim y As Integer
End Class
AttributeArguments
: AttributePositionalArgumentList
| AttributePositionalArgumentList Comma VariablePropertyInitializerList
| VariablePropertyInitializerList
;
AttributePositionalArgumentList
: AttributeArgumentExpression? ( Comma AttributeArgumentExpression? )*
;
VariablePropertyInitializerList
: VariablePropertyInitializer ( Comma VariablePropertyInitializer )*
;
VariablePropertyInitializer
: IdentifierOrKeyword ColonEquals AttributeArgumentExpression
;
AttributeArgumentExpression
: ConstantExpression
| GetTypeExpression
| ArrayExpression
;
Visual Basic language spec