Lebih
Apa { get; set; } sintaks di C#?
Saya belajar ASP.NET MVC dan aku dapat membaca dokumen bahasa inggris, tapi aku don't benar-benar memahami apa yang terjadi di dalam kode ini:
public class Genre
{
public string Name { get; set; }
}
Apa artinya ini: { get; set; }
?
542
16
It's yang disebut auto properti, dan pada dasarnya adalah sebuah singkatan sebagai berikut (kode yang sama akan dihasilkan oleh compiler):
Jadi seperti yang saya mengerti
{ get; set; }
adalah "auto properti" yang sama seperti @Klaus dan @Brandon mengatakan adalah singkatan untuk menulis sebuah properti dengan "dukungan lapangan." Jadi dalam hal ini:Namun jika anda're seperti saya - sekitar satu jam yang lalu - anda don't benar-benar memahami apa sifat dan accesor, dan anda don't memiliki pemahaman terbaik dari beberapa terminologi dasar yang baik. MSDN adalah alat yang hebat untuk belajar hal-hal seperti ini, tapi itu's tidak selalu mudah untuk dipahami bagi pemula. Jadi saya'm akan mencoba untuk menjelaskan hal ini lebih mendalam di sini.
mendapatkan
danmengatur
adalah accesor, yang berarti mereka're dapat mengakses data dan informasi * swasta kolom (biasanya dari dukungan lapangan) dan biasanya melakukannya dari umum* sifat*** (seperti yang anda lihat dalam contoh di atas).Ada's tidak ada menyangkal bahwa pernyataan di atas adalah cukup membingungkan, jadi let's pergi ke beberapa contoh. Let's mengatakan kode ini mengacu pada genre musik. Jadi di dalam kelas Genre, we're akan ingin genre musik yang berbeda. Let's mengatakan kami ingin memiliki 3 genre: Hip-Hop, Rock, dan Country. Untuk melakukan hal ini kita akan menggunakan nama Kelas buat contoh dari kelas itu.
Sekarang kita've dibuat contoh dari Genre kelas, kita dapat mengatur genre nama menggunakan 'Nama' properti yang mengatur cara di atas.
Kita dapat mengatur nama 'g1' untuk Hip Hop dengan menulis sebagai berikut
Apa's terjadi di sini adalah semacam kompleks. Seperti yang saya katakan sebelumnya,
mendapatkan
danmengatur
akses informasi dari swasta bidang yang anda dinyatakan tidak't dapat mengakses.mendapatkan
hanya dapat baca informasi dari bidang pribadi dan mengembalikannya.mengatur
hanya dapat menulis informasi dalam bidang pribadi. Tapi dengan memiliki properti denganmendapatkan
danset
kita're dapat melakukan kedua fungsi tersebut. Dan dengan menulisg1.Nama = "Hip Hop";
kami khusus menggunakanset
fungsi dari Nama propertiset
menggunakan implisit variabel yang disebut dengannilai
. Pada dasarnya apa artinya ini adalah setiap kali anda melihat "nilai" dalamset
, it's mengacu pada variabel; "nilai" variabel. Ketika kita menulisg1.Nama =
kita're menggunakan=
untuk lulus dalamnilai
variabel yang dalam hal ini adalah"Hip Hop"
. Jadi pada dasarnya anda dapat berpikir seperti ini:It's Penting untuk dicatat bahwa contoh di atas isn't benar-benar tertulis dalam kode. It's lebih dari hipotetis kode yang mewakili apa yang's terjadi di latar belakang.
Jadi sekarang kita've set Nama g1 contoh Genre, saya percaya kita bisa dapatkan **** nama dengan menulis
dan jika kita berlari ini kita akan mendapatkan
"Hip Hop"
di konsol.Jadi untuk tujuan penjelasan ini saya'll lengkap contoh dengan output serta
Output:
Mereka adalah otomatis properties
Pada dasarnya cara lain penulisan properti dengan dukungan lapangan.
Ini adalah cara singkat untuk melakukan hal ini:
Itu adalah jalan pintas untuk mengekspos data anggota masyarakat sehingga anda don't perlu secara eksplisit membuat data pribadi anggota. C# akan menciptakan pribadi anggota data untuk anda.
Anda bisa saja membuat data anggota masyarakat tanpa menggunakan shortcut ini, tapi kemudian jika anda memutuskan untuk mengubah implementasi dari data-data anggota untuk memiliki beberapa logika maka anda akan perlu untuk memecahkan antarmuka. Jadi singkatnya ini adalah jalan pintas untuk membuat lebih fleksibel kode.
Pada dasarnya, it's shortcut:
Its auto-dilaksanakan properti untuk C#.
Mereka adalah orang asesor untuk properti publik Nama.
Anda akan menggunakan mereka untuk mendapatkan/menentukan nilai dari properti itu dalam sebuah contoh dari Genre.
Itu adalah Auto-Properti yang Diterapkan. It's pada dasarnya adalah cara singkat menciptakan sifat untuk kelas di C#, tanpa harus mendefinisikan pribadi variabel untuk mereka. Mereka biasanya digunakan ketika tidak ada tambahan logika diperlukan ketika mendapatkan atau menetapkan nilai dari sebuah variabel.
Anda dapat membaca lebih lanjut di MSDN's Auto-Menerapkan sifat-Sifat Pemrograman Panduan.
Ini berarti bahwa jika anda membuat variabel dari tipe Genre, anda akan dapat mengakses variabel sebagai properti
Dapatkan/mengatur pola memberikan struktur yang memungkinkan logika akan ditambahkan selama pengaturan ('set') atau pengambilan ('mendapatkan') properti contoh contoh kelas, yang dapat berguna ketika beberapa instansiasi logika diperlukan untuk properti.
Properti dapat memiliki 'mendapatkan' pengakses hanya, yang dilakukan dalam rangka untuk membuat yang properti hanya-baca
Ketika menerapkan dapatkan/mengatur pola, variabel perantara yang digunakan sebagai wadah di mana nilai dapat ditempatkan dan nilai diekstrak. Menengah variabel ini biasanya diawali dengan garis bawah. hotel menengah variabel pribadi dalam rangka untuk memastikan bahwa hal itu hanya dapat diakses melalui get/set panggilan. Melihat jawaban dari Brandon, sebagai jawabannya menunjukkan yang paling umum digunakan sintaks konvensi untuk melaksanakan dapatkan/set.
Seperti
{ get; set; }
sintaks disebut automatic sifat, C# 3.0 sintaksAnda harus menggunakan Visual C# 2008 / csc v3.5 atau di atas untuk mengkompilasi. Tapi anda dapat menyusun target output yang rendah .NET Framework 2.0 (tidak runtime atau kelas-kelas yang diperlukan untuk mendukung fitur ini).
Di Visual Studio, jika anda mendefinisikan property
X
di kelas dan anda ingin menggunakan kelas ini hanya sebagai sebuah tipe, setelah bangunan proyek anda, anda akan mendapatkan peringatan yang mengatakan "Bidang X pernah ditugaskan untuk, dan akan selalu memiliki nilai default".Dengan menambahkan
{ get; set; }
untukX
properti, anda tidak akan mendapatkan peringatan ini.Selain itu dalam Visual Studio 2013 dan versi atas, dengan menambahkan
{ get; set; }
anda dapat melihat semua referensi untuk properti tersebut.Pada dasarnya sebuah singkatan. Anda dapat menulis
public string Nama { get; set; }
seperti dalam banyak contoh, tapi anda juga dapat menulis:Mengapa digunakan? Hal ini dapat digunakan untuk menyaring akses ke properti, misalnya anda don't ingin nama untuk memasukkan angka.
Mari saya beri contoh:
Secara resmi yang disebut Auto-Menerapkan sifat-Sifat dan kebiasaan yang baik untuk membaca (panduan pemrograman). Saya juga akan merekomendasikan tutorial video [C# Properties: Mengapa menggunakan "mendapatkan" dan ""][2].
Dapatkan set pengubah akses ke properti. Dapatkan membaca dibidang properti. Set nilai properti. Dapatkan adalah seperti akses hanya-Baca. Set lebih suka Menulis-satunya akses. Untuk menggunakan properti seperti membaca menulis baik mendapatkan dan menetapkan harus digunakan.
Dapatkan dipanggil ketika properti yang muncul pada sisi kanan (RHS) Set dipanggil ketika properti yang muncul pada sisi kiri (LHS) dari '=' simbol
Untuk auto-dilaksanakan properti, dukungan lapangan pekerjaan di belakang layar dan tidak terlihat.
Contoh:
Sedangkan untuk non auto-dilaksanakan properti dukungan lapangan dimuka, terlihat sebagai pribadi scoped variabel.
Contoh:
Juga, patut dicatat di sini adalah 'getter' dan 'setter' dapat menggunakan berbeda 'dukungan field'