Ekspresi Objek

Ekspresi objek adalah ekspresi yang membuat instans baru dari kompiler yang dihasilkan, jenis objek anonim yang didasarkan pada jenis dasar, antarmuka, atau set antarmuka yang ada.

Sintaks

// 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 ]
}

Keterangan

Dalam sintaks sebelumnya, typename mewakili jenis kelas atau jenis antarmuka yang ada. type-params menjelaskan parameter jenis generik opsional. Arguments hanya digunakan untuk jenis kelas, yang memerlukan parameter konstruktor. Member-definitions adalah penimpaan metode kelas dasar, atau implementasi metode abstrak dari kelas dasar atau antarmuka.

Contoh berikut mengilustrasikan beberapa jenis ekspresi objek yang berbeda.

// 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() = () }

Menggunakan Ekspresi Objek

Anda menggunakan ekspresi objek saat Anda ingin menghindari overhead dan kode tambahan yang diperlukan untuk membuat jenis baru bernama. Jika Anda menggunakan ekspresi objek untuk meminimalkan jumlah jenis yang dibuat dalam suatu program, Anda dapat mengurangi jumlah baris kode dan mencegah proliferasi jenis yang tidak perlu. Daripada membuat banyak jenis hanya untuk menangani situasi tertentu, Anda dapat menggunakan ekspresi objek yang menyesuaikan jenis yang ada atau menyediakan implementasi antarmuka yang sesuai untuk kasus tertentu yang ada.

Lihat juga