-
Cara menggunakan C# set dan dapatkan
Bahasa C# memiliki dua fungsi - fungsi penugasan (get) dan fungsi nilai (set), yang terlihat jelas dari kode bahasa perantara yang dihasilkannya. C# tidak menganjurkan pengaturan tingkat perlindungan domain ke publik dan mengizinkan pengguna untuk beroperasi secara sewenang-wenang di luar kelas - itu terlalu tidak OO, atau lebih spesifiknya, terlalu tidak aman! Untuk semua bidang yang perlu terlihat di luar kelas, C# merekomendasikan penggunaan atribut untuk mengekspresikannya. Atribut tidak mewakili lokasi penyimpanan, yang merupakan perbedaan mendasar antara atribut dan domain. Berikut ini adalah desain atribut yang khas:
menggunakan Sistem;
kelasKelas Saya
{
int bilangan bulat;
publik ke dalam Integer
{
dapatkan {kembalikan bilangan bulat;}
himpunan {bilangan bulat=nilai;}
}
}
Tes kelas
{
kekosongan statis publik Utama()
{
Kelas Saya Objek Saya=Kelas Saya baru();
Console.Write(MyObject.Integer);
Objek Saya.Bilangan Bulat++;
Console.Write(MyObject.Integer);
}
}
Seperti yang diharapkan, program menghasilkan 0 1. Kita dapat melihat bahwa atribut menyediakan antarmuka akses yang ramah bagi pemrogram ke anggota domain dengan metode pembungkusan. Nilai di sini adalah kata kunci C#, yang merupakan parameter implisit dari set saat kita melakukan operasi atribut, yaitu nilai r saat kita melakukan operasi penulisan atribut.
Atribut menyediakan tiga operasi antarmuka: read-only (get), write-only (set), dan read-write (get dan set). Ketiga operasi pada domain ini harus dideklarasikan dengan nama atribut yang sama dan tidak dapat dipisahkan. Lihat implementasi berikut:
kelasKelas Saya
{
nama string pribadi;
Nama string publik
{
dapatkan { nama kembalian; }
}
Nama string publik
{
himpunan { nama = nilai }
}
}
Metode pemisahan implementasi atribut Nama di atas salah! Kita harus menggabungkannya seperti pada contoh sebelumnya. Perlu dicatat bahwa ketiga properti (read-only, write-only, read-write) dianggap sebagai nama properti yang sama dengan C#, lihat contoh berikut:
kelasKelas Saya
{
dilindungi int angka=0;
publik int Nomor
{
mengatur
{
angka=nilai;
}
}
}
kelas Kelas SayaBerasal: Kelas Saya
{
int publik baru Num
{
mendapatkan
{
nomor pengembalian;
}
}
}
Tes kelas
{
kekosongan statis publik Utama()
{
MyClassDerived MyObject = new MyClassDerived();
//Objek Saya.Nomor= 1; //Kesalahan!
((Kelas Saya)Objek Saya).Jumlah = 1;
}
}
Kita bisa melihat bahwa atribut Num-get{} di MyClassDerived memblokir definisi atribut Num-set{} di MyClass.
Tentu saja, atribut lebih dari sekadar operasi antarmuka domain. Inti dari atribut tetaplah metode. Kita dapat melakukan pemeriksaan tertentu, peringatan, dan operasi tambahan lainnya berdasarkan logika program saat mengekstraksi atau menetapkan atribut.
kelasKelas Saya
{
nama string pribadi;
Nama string publik
{
dapatkan { nama kembalian; }
mengatur
{
jika (nilai==null)
nama="Microsoft";
kalau tidak
nama=nilai;
}
}
}
Karena sifat dari metode atribut, tentunya atribut juga mempunyai berbagai macam modifikasi metode. Atribut juga memiliki 5 pengubah akses, tetapi pengubah akses atribut sering kali bersifat publik, jika tidak, kita akan kehilangan arti atribut sebagai antarmuka publik kelas. Selain kurangnya atribut fitur seperti kelebihan metode yang disebabkan oleh beberapa parameter metode, pengubah seperti virtual, tersegel, override, dan abstrak memiliki perilaku yang sama untuk atribut dan metode , itu Perilaku tertentu memerlukan perhatian kita. Lihatlah contoh berikut:
kelas abstrak A
{
ke dalam kamu;
int virtual publik X
{
dapatkan { kembali 0 ;
}
int virtual publik Y
{
dapatkan { kembalikan y }
himpunan { y = nilai }
}
abstrak publik int Z { dapatkan;
}
kelas B: A
{
ke dalam z;
penggantian publik ke dalam X
{
dapatkan { return base.X + 1;
}
penggantian publik ke Y
{
set { basis.Y = nilai < 0: nilai;
}
penggantian publik ke int Z
{
dapatkan { kembalikan z; }
himpunan { z = nilai }
}
}
Contoh ini menyoroti beberapa perilaku khas properti dalam konteks pewarisan. Di sini kelas A harus dinyatakan abstrak karena adanya atribut abstrak Z. Subkelas B mengacu pada atribut kelas induk A melalui kata kunci dasar. Kelas B dapat menimpa atribut virtual di kelas A hanya melalui himpunan Y.
Properti statis, seperti metode statis, hanya dapat mengakses variabel domain statis kelas tersebut. Kita juga dapat mendeklarasikan properti eksternal seperti yang kita lakukan pada metode eksternal.