Nesne İfadeleri

Nesne ifadesi, var olan bir temel türü, arabirimi veya arabirim kümesini temel alan, derleyici tarafından oluşturulan, anonim nesne türünün yeni bir örneğini oluşturan bir ifadedir.

Sözdizimi

// 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 diziminde, tür adı varolan 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 örnekte birkaç farklı nesne ifadesi türü gösterilmektedir.

// 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ükten kaçınmak istediğinizde nesne ifadelerini kullanırsınız. Bir programda oluşturulan tür 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 şekilde çoğalmasını önleyebilirsiniz. Yalnızca belirli durumları işlemek için birçok tür oluşturmak yerine, mevcut bir türü özelleştiren veya eldeki belirli bir durum için uygun bir arabirim uygulaması sağlayan bir nesne ifadesi kullanabilirsiniz.

Ayrıca bkz.