Öznitelikler (F#)
Öznitelikler, meta verilerin bir programlama yapısına uygulanmasını sağlar.
Sözdizimi
[<target:attribute-name(arguments)>]
Açıklamalar
Önceki söz diziminde, hedef isteğe bağlıdır ve varsa özniteliğin uygulanacağı program varlığının türünü belirtir. hedef için geçerli değerler, bu belgenin ilerleyen bölümlerinde gösterilen tabloda gösterilir.
öznitelik-adı, genellikle öznitelik türü adlarında kullanılan Attribute
sonekini içeren veya içermeyen, geçerli bir öznitelik türünün adını (muhtemelen ad alanlarıyla nitelikli) ifade eder. Örneğin, tür ObsoleteAttribute
yalnızca bu bağlamda Obsolete
olarak kısaltılabilir.
bağımsız değişkenleri, öznitelik türü için oluşturucunun bağımsız değişkenleridir. Bir özniteliğin parametresiz oluşturucu varsa, bağımsız değişken listesi ve parantezler atlanabilir. Öznitelikler hem konumsal bağımsız değişkenleri hem de adlandırılmış bağımsız değişkenleri destekler. Konumsal bağımsız değişkenler, göründükleri sırada kullanılan bağımsız değişkenlerdir. Özniteliğin genel özellikleri varsa, adlandırılmış bağımsız değişkenler kullanılabilir. Bunları, bağımsız değişken listesinde aşağıdaki söz dizimini kullanarak ayarlayabilirsiniz.
property-name = property-value
Bu tür özellik başlatmaları herhangi bir sırada olabilir, ancak mutlaka konumsal bağımsız değişkenlerden sonra gelmelidir. Aşağıda, konumsal bağımsız değişkenler ve özellik başlatmaları kullanan bir öznitelik örneği verilmiştir:
open System.Runtime.InteropServices
[<DllImport("kernel32", SetLastError=true)>]
extern bool CloseHandle(nativeint handle)
Bu örnekte, DllImportAttribute
özniteliği kısaltılmış biçimde kullanılmıştır. İlk bağımsız değişken bir konumsal parametre, ikincisi ise bir özelliktir.
Öznitelikler, özniteliği olarak bilinen bir nesnenin bir tür veya başka bir program öğesiyle ilişkilendirilmesine sağlayan bir .NET programlama yapısıdır. Özniteliğin uygulandığı program öğesi,
F# içindeki öznitelikler şu programlama yapılarına uygulanabilir: işlevler, yöntemler, derlemeler, modüller, türler (sınıflar, kayıtlar, yapılar, arabirimler, temsilciler, numaralandırmalar, birleşimler vb.), oluşturucular, özellikler, alanlar, parametreler, tür parametreleri ve dönüş değerleri. Sınıflar, ifadeler veya iş akışı ifadeleri içindeki let
bağlamalarında özniteliklere izin verilmez.
Genellikle öznitelik bildirimi, öznitelik hedefinin bildiriminden hemen önce görünür. Birden çok öznitelik bildirimi aşağıdaki gibi birlikte kullanılabilir:
[<Owner("Jason Carlson")>]
[<Company("Microsoft")>]
type SomeType1 =
.NET yansımasını kullanarak çalışma zamanında öznitelikleri sorgulayabilirsiniz.
Önceki kod örneğinde olduğu gibi birden çok özniteliği tek tek bildirebilir veya tek tek öznitelikleri ve oluşturucuları birbirinden ayırmak için noktalı virgül kullanırsanız bunları tek bir köşeli ayraç kümesinde bildirebilirsiniz:
[<Owner("Darren Parker"); Company("Microsoft")>]
type SomeType2 =
Genellikle karşılaşılan öznitelikler arasında Obsolete
özniteliği, güvenlik konuları öznitelikleri, COM desteği öznitelikleri, kodun sahipliğiyle ilgili öznitelikler ve bir türün serileştirilip serileştirilemeyeceğini gösteren öznitelikler bulunur. Aşağıdaki örnekte Obsolete
özniteliğinin kullanımı gösterilmektedir.
open System
[<Obsolete("Do not use. Use newFunction instead.")>]
let obsoleteFunction x y =
x + y
let newFunction x y =
x + 2 * y
// The use of the obsolete function produces a warning.
let result1 = obsoleteFunction 10 100
let result2 = newFunction 10 100
assembly
ve module
öznitelik hedefleri için, öznitelikleri derlemenizdeki üst düzey bir do
bağlamasına uygularsınız. öznitelik bildirimine aşağıdaki gibi assembly
veya ``module``
sözcüğünü ekleyebilirsiniz:
open System.Reflection
[<assembly:AssemblyVersionAttribute("1.0.0.0")>]
[<``module``:MyCustomModuleAttribute>]
do
printfn "Executing..."
bir do
bağlamasına uygulanan öznitelik için öznitelik hedefini atlarsanız, F# derleyicisi bu öznitelik için anlamlı olan öznitelik hedefini belirlemeye çalışır. Birçok öznitelik sınıfı, bu öznitelik için desteklenen olası hedefler hakkında bilgi içeren System.AttributeUsageAttribute
türünde bir özniteliğine sahiptir.
System.AttributeUsageAttribute
özniteliğinin hedef olarak işlevleri desteklediğini gösteriyorsa, özniteliği programın ana giriş noktasına uygulamak için alınır.
System.AttributeUsageAttribute
özniteliğinin derlemeleri hedef olarak desteklediğini gösterirse, derleyici derlemeye uygulamak için özniteliğini alır. Özniteliklerin çoğu hem işlevler hem de derlemeler için geçerli değildir, ancak böyle durumlarda özniteliği programın ana işlevine uygulamak için alınır. Öznitelik hedefi açıkça belirtilirse, öznitelik belirtilen hedefe uygulanır.
Genellikle öznitelik hedefini açıkça belirtmeniz gerekmese de, bir öznitelikteki hedef için geçerli değerler ve kullanım örnekleri aşağıdaki tabloda gösterilmiştir:
Öznitelik hedefi | Örnek |
---|---|
meclis |
|
modül |
|
yöntem |
|
sınıf |
|
Yapı |
|
arayüz |
|
enum |
|
Oluşturucu |
|
dönmek |
|
alan |
|
mülk |
|
param |
|
tür |
|