Saya belajar ASP.NET MVC dan saya bisa membaca dokumen bahasa Inggris, tetapi saya tidak begitu mengerti apa yang terjadi dalam kode ini:
public class Genre
{
public string Name { get; set; }
}
Apa ini berarti: { get; set; }
?
c#
properties
kn3l
sumber
sumber
{get; set;}
Anda membuat Bidang tetapi jika Anda meletakkannya,{get; set;}
Anda sedang membuat Properti . Memiliki properti dapat membuat beberapa hal lebih mudah terutama ketika bekerja dengan Reflection.Jawaban:
Ini adalah properti otomatis yang disebut, dan pada dasarnya adalah singkatan untuk berikut ini (kode yang sama akan dihasilkan oleh kompiler):
sumber
=
operator, tetapi hanya untuk satu elemen tertentu, bukan?name
yang dibuat. Jika Anda mencoba merujuk variabel pribadi ini di dalam kelas, itu akan gagal. Saya tidak yakin bagaimana C # melakukannya, tetapi berperilaku seolah-olah ada variabel pribadi tanpa nama, yang tidak dapat Anda akses dalam kode Anda.Jadi seperti yang saya pahami itu
{ get; set; }
adalah "properti otomatis" yang sama seperti @ Klaus dan @Brandon katakan adalah singkatan untuk menulis properti dengan "bidang dukungan." Jadi dalam hal ini:Namun jika Anda seperti saya - sekitar satu jam yang lalu - Anda tidak benar-benar memahami apa properti dan pengakses itu, dan Anda tidak memiliki pemahaman terbaik tentang beberapa terminologi dasar. MSDN adalah alat yang hebat untuk mempelajari hal-hal seperti ini, tetapi tidak selalu mudah dipahami untuk pemula. Jadi saya akan mencoba menjelaskan ini lebih mendalam di sini.
get
danset
yang accesor , yang berarti mereka dapat akses data dan info di swasta bidang (biasanya dari bidang dukungan ) dan biasanya melakukannya dari publik properti (seperti yang Anda lihat dalam contoh di atas).Tidak dapat disangkal bahwa pernyataan di atas cukup membingungkan, jadi mari kita masuk ke beberapa contoh. Katakanlah kode ini mengacu pada genre musik. Jadi di dalam Genre kelas, kita akan menginginkan genre musik yang berbeda. Katakanlah kita ingin memiliki 3 genre: Hip Hop, Rock, dan Country. Untuk melakukan ini kita akan menggunakan nama Kelas untuk membuat instance baru dari kelas itu.
Sekarang kita telah menciptakan contoh dari kelas Genre kita dapat mengatur nama bergenre menggunakan 'Nama' properti itu cara set up di atas.
Kita dapat mengatur nama 'g1' ke Hip Hop dengan menulis yang berikut ini
Apa yang terjadi di sini agak rumit. Seperti yang saya katakan sebelumnya,
get
danset
akses informasi dari bidang pribadi yang Anda tidak akan dapat mengakses.get
hanya dapat membaca informasi dari bidang pribadi itu dan mengembalikannya.set
hanya dapat menulis informasi di bidang pribadi itu. Tetapi dengan memiliki properti dengan keduanyaget
danset
kami dapat melakukan kedua fungsi tersebut. Dan dengan menulisg1.Name = "Hip Hop";
kami secara khusus menggunakanset
fungsi dari properti Nama kamiset
menggunakan variabel implisit yang disebutvalue
. Pada dasarnya apa artinya ini setiap kali Anda melihat "nilai" diset
dalamnya, itu merujuk ke variabel; variabel "nilai". Ketika kita menulis,g1.Name =
kita menggunakan=
untuk meneruskanvalue
variabel yang dalam hal ini adalah"Hip Hop"
. Jadi pada dasarnya Anda bisa memikirkannya seperti ini:Penting untuk dicatat bahwa contoh di atas sebenarnya tidak ditulis dalam kode. Ini lebih merupakan kode hipotetis yang mewakili apa yang terjadi di latar belakang.
Jadi sekarang kita telah menetapkan Nama g1 dari Genre , saya yakin kita bisa mendapatkan namanya dengan menulis
dan jika kita menjalankan ini kita akan masuk
"Hip Hop"
ke konsol kita.Jadi untuk tujuan penjelasan ini saya akan melengkapi contoh dengan output juga
Keluaran:
sumber
set{name = value;} // 'value' here is equal to "Hip Hop"
get
danset
metode. Tautan yang saya berikan memiliki kutipan yang sangat baik dari John Guttag di bagian atas halaman. Saya akan merekomendasikan membaca bukunya atau bahkan mengambil kursus online gratis inipublic class Genre{public string Name;}
bukan:public class Genre{ public string Name { get; set; }}
. Maksud saya, mengapa kita perlu {get; set; }?Itu adalah properti otomatis
Pada dasarnya cara lain menulis properti dengan bidang dukungan.
sumber
get
, dan tetap menggunakanset
). Seperti lemari tempatget
danset
membuka pintu._name
. Di properti otomatis, bidang dukungan disembunyikan.Ini adalah cara singkat untuk melakukan ini:
sumber
Ini adalah jalan pintas untuk mengekspos anggota data sebagai publik sehingga Anda tidak perlu secara eksplisit membuat anggota data pribadi. C # akan membuat anggota data pribadi untuk Anda.
Anda bisa membuat anggota data Anda menjadi publik tanpa menggunakan cara pintas ini tetapi kemudian jika Anda memutuskan untuk mengubah implementasi anggota data untuk memiliki beberapa logika maka Anda perlu memecah antarmuka. Jadi singkatnya itu adalah jalan pintas untuk membuat kode yang lebih fleksibel.
sumber
Pada dasarnya, ini adalah jalan pintas dari:
sumber
Ini properti yang diimplementasikan secara otomatis untuk C #.
sumber
get; set;
dipanggil?null
sepertistring
variabel apa pun sampaisomeInstanceOfGenere.Name = "someValue"
Mereka adalah penentu untuk Nama properti publik.
Anda akan menggunakannya untuk mendapatkan / menetapkan nilai properti itu dalam instance Genre.
sumber
Itu adalah Properti yang Diimplementasikan Secara Otomatis. Ini pada dasarnya cara singkat membuat properti untuk kelas di C #, tanpa harus mendefinisikan variabel pribadi untuk mereka. Mereka biasanya digunakan ketika tidak ada logika tambahan yang diperlukan ketika mendapatkan atau mengatur nilai suatu variabel.
Anda dapat membaca lebih lanjut tentang Panduan Pemrograman Properti yang Diterapkan Otomatis MSDN .
sumber
Pola get / set menyediakan struktur yang memungkinkan logika untuk ditambahkan selama pengaturan ('set') atau pengambilan ('get') dari instance properti dari kelas instantiated, yang dapat berguna ketika beberapa logika instantiation diperlukan untuk Properti.
Properti dapat memiliki aksesor 'dapatkan' saja, yang dilakukan untuk menjadikan properti tersebut hanya-baca
Saat menerapkan pola get / set, variabel perantara digunakan sebagai wadah di mana nilai dapat ditempatkan dan nilai diekstraksi. Variabel perantara biasanya diawali dengan garis bawah. variabel perantara ini bersifat pribadi untuk memastikan bahwa ia hanya dapat diakses melalui panggilan get / set. Lihat jawaban dari Brandon, karena jawabannya menunjukkan konvensi sintaksis yang paling umum digunakan untuk mengimplementasikan get / set.
sumber
Ini berarti bahwa jika Anda membuat variabel jenis Genre, Anda akan dapat mengakses variabel sebagai properti
sumber
{ get; set; }
Sintaksis seperti ini disebut properti otomatis, sintaksis C # 3.0Anda harus menggunakan Visual C # 2008 / csc v3.5 atau lebih tinggi untuk mengkompilasi. Tetapi Anda dapat mengkompilasi output yang menargetkan serendah .NET Framework 2.0 (tidak perlu runtime atau kelas untuk mendukung fitur ini).
sumber
Di Visual Studio, jika Anda mendefinisikan properti
X
di kelas dan Anda ingin menggunakan kelas ini hanya sebagai tipe, setelah membangun proyek Anda, Anda akan mendapatkan peringatan yang mengatakan "Bidang X tidak pernah ditugaskan, dan akan selalu memiliki standarnya nilai" .Dengan menambahkan
{ get; set; }
keX
properti , Anda tidak akan mendapatkan peringatan ini.Selain itu di Visual Studio 2013 dan versi atas, dengan menambahkan
{ get; set; }
Anda dapat melihat semua referensi ke properti itu.sumber
Ini pada dasarnya sebuah steno. Anda dapat menulis
public string Name { get; set; }
seperti dalam banyak contoh, tetapi Anda juga dapat menulisnya:Kenapa digunakan? Ini dapat digunakan untuk memfilter akses ke properti, misalnya Anda tidak ingin nama menyertakan angka.
Biarkan saya memberi Anda sebuah contoh:
Secara resmi disebut Properti Diterapkan-Otomatis dan kebiasaan yang baik untuk membaca ( panduan pemrograman ). Saya juga akan merekomendasikan video tutorial C # Properties: Mengapa menggunakan "get" dan "set" .
sumber
Set adalah pengubah akses ke properti. Baca bidang properti. Set mengatur nilai properti. Dapatkan seperti akses hanya baca. Set seperti akses hanya-tulis. Untuk menggunakan properti sebagai baca tulis, get dan set harus digunakan.
sumber
Get dipanggil ketika properti muncul di sisi kanan (RHS) Set dipanggil ketika properti muncul di sisi kiri (LHS) dari simbol '='
Untuk properti yang diimplementasikan secara otomatis, bidang dukungan bekerja di belakang layar dan tidak terlihat.
Contoh:
Sedangkan untuk properti yang tidak diimplementasikan otomatis, bidang dukungan di muka, terlihat sebagai variabel cakupan pribadi.
Contoh:
Juga, perlu dicatat di sini adalah 'pengambil' dan 'penyetel' dapat menggunakan 'bidang dukungan' yang berbeda
sumber
Tentukan variabel Private
Di dalam konstruktor dan memuat data
Saya telah membuat Constant dan memuat data dari konstanta ke kelas Daftar yang Dipilih.
sumber
Properti adalah seperti lapisan yang memisahkan variabel pribadi dari anggota kelas lainnya. Dari dunia luar rasanya seperti properti hanya bidang, properti dapat diakses menggunakan .Property
FullName adalah Properti. Yang dengan panah adalah jalan pintas. Dari dunia luar, kita dapat mengakses FullName seperti ini:
Penelepon tidak peduli tentang bagaimana Anda menerapkan Nama Lengkap. Namun di dalam kelas Anda dapat mengubah FullName apa pun yang Anda inginkan.
Lihat Dokumentasi Microsoft untuk penjelasan lebih rinci:
https://docs.microsoft.com/en-us/dotnet/csharp/properties
sumber