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.