Nesne İfadeleri
Nesne ifadesi, mevcut bir temel türü, arabirimi veya arabirimleri temel alan dinamik olarak oluşturulmuş, anonim nesne türünün yeni bir örneğini oluşturan bir ifadedir.
Syntax
// When typename is a class:
{ new typename [type-params]arguments with
member-definitions
[ additional-interface-definitions ]
}
// When typename is not a class:
{ new typename [generic-type-args] with
member-definitions
[ additional-interface-definitions ]
}
Açıklamalar
Önceki söz dizimsinde typename, var olan bir sınıf türünü veya arabirim türünü temsil eder. type-params, isteğe bağlı genel tür parametrelerini açıklar. Bağımsız değişkenler yalnızca oluşturucu parametreleri gerektiren sınıf türleri için kullanılır. Üye tanımları, temel sınıf yöntemlerinin geçersiz kılmaları veya bir temel sınıftan veya arabirimden soyut yöntemlerin uygulamalarıdır.
Aşağıdaki örnek, birkaç farklı nesne ifadesi türü gösterir.
// This object expression specifies a System.Object but overrides the
// ToString method.
let obj1 = { new System.Object() with member x.ToString() = "F#" }
printfn $"{obj1}"
// This object expression implements the IFormattable interface.
let delimiter(delim1: string, delim2: string, value: string) =
{ new System.IFormattable with
member x.ToString(format: string, provider: System.IFormatProvider) =
if format = "D" then
delim1 + value + delim2
else
value }
let obj2 = delimiter("{","}", "Bananas!");
printfn "%A" (System.String.Format("{0:D}", obj2))
// Define two interfaces
type IFirst =
abstract F : unit -> unit
abstract G : unit -> unit
type ISecond =
inherit IFirst
abstract H : unit -> unit
abstract J : unit -> unit
// This object expression implements both interfaces.
let implementer() =
{ new ISecond with
member this.H() = ()
member this.J() = ()
interface IFirst with
member this.F() = ()
member this.G() = () }
Nesne İfadelerini Kullanma
Yeni, adlandırılmış bir tür oluşturmak için gereken ek kod ve ek yükü önlemek istediğiniz nesne ifadelerini kullanırsiniz. Bir programda oluşturulan türlerin sayısını en aza indirmek için nesne ifadeleri kullanırsanız, kod satırlarının sayısını azaltabilir ve türlerin gereksiz bir şekilde yayılmasını önebilirsiniz. Yalnızca belirli durumları işlemek için birçok tür oluşturmak yerine, var olan bir türü özelleştiren veya el ile belirli bir durum için uygun bir arabirim uygulaması sağlayan bir nesne ifadesi kullanabilirsiniz.