Ö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, DllImportAttributeburada 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
[<assembly: AssemblyVersion("1.0.0.0")>]
modül
[<``module``: MyCustomAttributeThatWorksOnModules>]
return
let function1 x : [<return: MyCustomAttributeThatWorksOnReturns>] int = x + 1
alan
[<DefaultValue>] val mutable x: int
özellik
[<Obsolete>] this.MyProperty = x
param
member this.MyMethod([<Out>] x : ref<int>) = x := 10
Tür
[<type: StructLayout(LayoutKind.Sequential)>]
type MyStruct =
  struct
    val x : byte
    val y : int
  end

Ayrıca bkz.