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.
Jawaban:
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.
persis sama dengan ini:
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.
sumber
new Person(lastName: "Simpson")
, meninggalkan parameterfirstName
danage
.var x = new Person("Homer", "Simpson", 47);