membuat parameter objek di {}?


14

Saya mencoba men-decode sepotong kode dari buku:

List<Person> people = new List<Person>()
{
new Person {FirstName="Homer",LastName="Simpson",Age=47},
new Person {FirstName="Marge",LastName="Simpson",Age=45}
};

Orang hanyalah kelas sederhana yang mereka buat, dengan banyak bidang: Nama, Nama Belakang, dll ...

Yang tidak saya mengerti adalah, bukankah kita mengirim parameter ke konstruktor Person di kurung non-keriting? Saya mencoba mereplikasi kode ini, tetapi sepertinya tidak bisa terbang, mengerti?

Terima kasih atas masukannya.



1
"Saya mencoba mereplikasi kode ini, tetapi sepertinya tidak bisa terbang" <- Anda harus menggunakan C # 3 (VS 2008) atau lebih baru agar sintaks ini tersedia.
AakashM

Waspadai perbedaan antara dua konsep: Inisialisasi Objek dan Populasi Objek. Secara umum Anda melakukan inisialisasi di konstruktor. Metode contoh Anda paling baik digunakan untuk populasi bukan untuk inisialisasi.
NoChance

Jawaban:


27

C # memungkinkan Anda untuk menentukan parameter properti dalam kurung kurawal ketika objek diinisialisasi. Ini memungkinkan Anda untuk memilih dan memilih item mana yang akan diinisialisasi dan yang akan dibiarkan sebagai default.

Sebaliknya, konstruktor menjalankan satu blok kode tunggal dengan seperangkat parameter tetap. Jadi untuk mendapatkan efek yang sama, Anda harus membuat banyak konstruktor dengan berbagai kombinasi properti yang mungkin ingin Anda inisialisasi, yang mungkin membosankan.

var x = new Person {FirstName="Homer",LastName="Simpson",Age=47}; 

persis sama dengan ini:

var x = new Person();
x.FirstName="Homer";
x.LastName="Simpson";
x.Age=47;

Kecuali bahwa itu lebih pendek dan bisa dibilang lebih mudah di mata.

Ini juga memungkinkan untuk konstruksi seperti yang Anda tunjukkan dalam pertanyaan Anda, yang akan sangat membosankan jika Anda harus membuat variabel sementara dan menginisialisasi mereka seperti yang saya lakukan di sini sebelum menambahkannya ke daftar. (Begitulah cara Anda dulu harus melakukannya.) Semua tanpa memerlukan konstruktor yang didefinisikan secara eksplisit yang mengambil daftar parameter yang Anda inginkan, yang mungkin atau mungkin tidak tersedia.

Juga, perhatikan bahwa sementara konstruktor dapat menginisialisasi properti dengan setter pribadi, teknik ini (seperti yang seharusnya jelas dari contoh yang diberikan) hanya akan berfungsi jika Anda memiliki setter publik untuk properti. Juga perhatikan bahwa contoh singkat saya secara implisit disebut konstruktor default (parameterless), yang karenanya harus ada.


Mungkin perlu ditambahkan bahwa karena ini, properti yang diinisialisasi dalam kurung kurawal harus dapat diatur secara publik.
Yam Marcovic

@YamMarcovic ah. Iya. Catatan ditambahkan ke efek itu.
tylerl

2
Ah, saya tercerahkan, penjelasan yang sangat bagus.
RealityDysfunction

2
Untuk mendapatkan efek yang sangat mirip dengan konstruktor tunggal, Anda bisa menjadikan semua parameternya opsional. Maka Anda bisa melakukan sesuatu seperti new Person(lastName: "Simpson"), meninggalkan parameter firstNamedan age.
svick

Ini tidak membahas mengapa Anda tidak bisa meneruskannya ke konstruktor, yaituvar x = new Person("Homer", "Simpson", 47);
rayray
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.