Ö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 soneki Attribute
içeren veya olmayan geçerli bir öznitelik türünün adına (büyük olasılıkla ad alanlarıyla nitelenmiş) başvurur. Örneğin, türü ObsoleteAttribute
yalnızca Obsolete
bu bağlamda olarak kısaltılabilir.
Bağımsız değişkenler, öznitelik türünün oluşturucusunun 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ırayla kullanılan bağımsız değişkenlerdir. Özniteliğin ortak ö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 herhangi bir konumsal bağımsız değişkeni izlemeleri gerekir. 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 özniteliği, DllImportAttribute
burada kısaltılmış biçimde kullanılır. İlk bağımsız değişken bir konumsal parametre, ikincisi ise bir özelliktir.
Öznitelikler, öznitelik olarak bilinen bir nesnenin bir tür veya başka bir program öğesiyle ilişkilendirilmesine olanak tanıyan bir .NET programlama yapısıdır. Özniteliğin uygulandığı program öğesi, öznitelik hedefi olarak bilinir. özniteliği genellikle hedefiyle ilgili meta veriler içerir. Bu bağlamda meta veriler, alanları ve üyeleri dışındaki türle ilgili herhangi bir veri olabilir.
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 bağlamalarda özniteliklere izin verilmez let
.
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 özniteliğini, güvenlikle ilgili dikkat edilmesi gerekenleri, COM desteği özniteliklerini, kodun sahipliğiyle ilgili öznitelikleri ve bir türün serileştirilip serileştirilemeyeceğini belirten öznitelikleri içerir Obsolete
. Aşağıdaki örnekte özniteliğinin kullanımı gösterilmektedir Obsolete
.
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
ve module
öznitelik hedefleri assembly
için, öznitelikleri derlemenizdeki bir üst düzey do
bağlamaya uygularsınız. sözcüğünü assembly
veya ``module``
öznitelik bildirimine aşağıdaki gibi ekleyebilirsiniz:
open System.Reflection
[<assembly:AssemblyVersionAttribute("1.0.0.0")>]
[<``module``:MyCustomModuleAttribute>]
do
printfn "Executing..."
Bağlamaya do
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 bir tür System.AttributeUsageAttribute
özniteliğine sahiptir. System.AttributeUsageAttribute
özniteliğinin hedef olarak işlevleri desteklediğini gösterirse, özniteliği programın ana giriş noktasına uygulanacak şekilde alınır. System.AttributeUsageAttribute
özniteliğinin derlemeleri hedef olarak desteklediğini gösteriyorsa, 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 |
---|---|
derleme |
|
modül |
|
return |
|
alan |
|
özellik |
|
param |
|
Tür |
|