Bagikan melalui


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.

Sintaksis

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

Komentar

Dalam sintaks sebelumnya, typename mewakili jenis kelas atau jenis antarmuka yang ada. type-params menjelaskan parameter jenis generik opsional. Argumen hanya digunakan untuk jenis kelas, yang memerlukan parameter konstruktor. Definisi anggota adalah penggantian 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 kode tambahan dan overhead yang diperlukan untuk membuat jenis baru bernama. Jika Anda menggunakan ekspresi objek untuk meminimalkan jumlah jenis yang dibuat dalam program, Anda dapat mengurangi jumlah baris kode dan mencegah proliferasi jenis yang tidak perlu. Alih-alih 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 sedang ditangani.

Lihat juga