Pertanyaan singkat: Kapan Anda memutuskan untuk menggunakan properti (dalam C #) dan kapan Anda memutuskan untuk menggunakan metode?
Kami sibuk berdebat ini dan menemukan beberapa area di mana masih diperdebatkan apakah kami harus menggunakan properti atau metode. Salah satu contohnya adalah ini:
public void SetLabel(string text)
{
Label.Text = text;
}
Sebagai contoh, Label
adalah kontrol pada halaman ASPX. Apakah ada prinsip yang dapat mengatur keputusan (dalam hal ini) apakah akan menjadikan ini metode atau properti.
Saya akan menerima jawaban yang paling umum dan komprehensif, tetapi itu juga menyentuh contoh yang telah saya berikan.
c#
properties
methods
Trumpi
sumber
sumber
if()
cek (sesuai MSDN). Tetapi ini rumit karena pengguna tidak selalu menyadari biaya pemrosesan di balik mengakses variabel (properti) (yaitu kode tidak tersedia) dan untuk alasan ketat seseorang harus membandingkan properti. Oh, dan "bonus" Anda tidak dapat menggunakan pointer dengan properti.Jawaban:
Dari bagian Memilih Antara Properti dan Metode Panduan Desain untuk Mengembangkan Perpustakaan Kelas:
sumber
Ya, jika semua yang Anda lakukan adalah mendapatkan dan mengatur, gunakan properti.
Jika Anda melakukan sesuatu yang kompleks yang dapat memengaruhi beberapa anggota data, metode yang lebih tepat. Atau jika pengambil Anda mengambil parameter atau penyetel Anda membutuhkan lebih dari satu parameter nilai.
Di tengah adalah area abu-abu di mana garis bisa sedikit kabur. Tidak ada aturan yang tegas dan cepat dan orang yang berbeda terkadang tidak setuju apakah sesuatu harus menjadi properti atau metode. Yang penting adalah menjadi (secara relatif) konsisten dengan cara Anda melakukannya (atau cara tim Anda melakukannya).
Mereka sebagian besar dapat dipertukarkan tetapi properti memberi sinyal kepada pengguna bahwa penerapannya relatif "sederhana". Oh dan sintaksnya sedikit lebih bersih.
Secara umum, filosofi saya adalah jika Anda mulai menulis nama metode yang dimulai dengan get atau set dan mengambil nol atau satu parameter (masing-masing) maka itu adalah kandidat utama untuk sebuah properti.
sumber
Properti adalah cara untuk memasukkan atau mengambil data dari suatu objek. Mereka membuat abstraksi atas variabel atau data di dalam kelas. Mereka serupa dengan getter dan setter di Java.
Metode merangkum operasi.
Secara umum saya menggunakan properti untuk mengekspos bit tunggal data, atau kalkulasi kecil pada kelas, seperti pajak penjualan. Yang diperoleh dari jumlah item dan biayanya di keranjang belanja.
Saya menggunakan metode saat membuat operasi, seperti mengambil data dari database. Setiap operasi yang memiliki bagian yang bergerak, adalah kandidat untuk suatu metode.
Dalam contoh kode Anda, saya akan membungkusnya di properti jika saya perlu mengaksesnya di luar kelas yang berisi:
public Label Title { get{ return titleLabel;} set{ titleLabel = value;} }
Mengatur teks:
Title.Text = "Properties vs Methods";
Jika saya hanya mengatur properti Teks dari Label, inilah cara saya melakukannya:
public string Title { get{ return titleLabel.Text;} set{ titleLabel.Text = value;} }
Mengatur teks:
Title = "Properties vs Methods";
sumber
Jika Anda menyetel properti sebenarnya dari objek Anda, maka Anda menggunakan properti.
Jika Anda melakukan tugas / fungsionalitas maka Anda menggunakan metode.
Dalam contoh Anda, ini adalah properti pasti yang sedang ditetapkan.
Namun, jika fungsionalitas Anda adalah AppendToLabel maka Anda akan menggunakan metode.
sumber
Mencari melalui MSDN, saya menemukan referensi tentang Properti vs Metode yang memberikan beberapa pedoman hebat untuk membuat metode:
sumber
Anda hanya perlu melihat nama ... "Properti". Apa artinya? Kamus mendefinisikannya dengan banyak cara, tetapi dalam hal ini "atribut atau kualitas yang esensial atau berbeda atau kualitas sesuatu" paling cocok.
Pikirkan tentang tujuan tindakan tersebut. Apakah Anda, pada kenyataannya, mengubah atau mendapatkan kembali "atribut yang esensial atau berbeda"? Dalam contoh Anda, Anda menggunakan fungsi untuk menyetel properti kotak teks. Kedengarannya konyol, bukan?
Properti sebenarnya adalah fungsi. Mereka semua dikompilasi menjadi getXXX () dan setXXX (). Itu hanya menyembunyikannya dalam gula sintaksis, tetapi gula itulah yang memberikan makna semantik pada proses tersebut.
Pikirkan tentang properti seperti atribut. Mobil memiliki banyak atribut. Warna, MPG, Model, dll. Tidak semua properti dapat disetel, beberapa dapat dihitung.
Sedangkan Metode adalah tindakan. GetColor harus menjadi properti. GetFile () harus berupa sebuah fungsi. Aturan praktis lainnya adalah, jika itu tidak mengubah status objek, maka itu harus menjadi fungsi. Misalnya, CalculatePiToNthDigit (n) harus berupa fungsi, karena fungsi ini tidak benar-benar mengubah status objek Matematika yang dilampirkan.
Ini mungkin sedikit bertele-tele, tetapi intinya adalah memutuskan apa objek Anda, dan apa yang mereka wakili. Jika Anda tidak tahu apakah itu harus menjadi properti atau fungsi, mungkin tidak masalah yang mana.
sumber
Properti secara simbolis adalah atribut objek Anda. Metode adalah perilaku objek Anda.
Label adalah sebuah atribut dan lebih masuk akal untuk menjadikannya sebagai properti.
Dalam hal Pemrograman Berorientasi Objek, Anda harus memiliki pemahaman yang jelas tentang apa itu bagian dari perilaku dan apa yang hanya atribut.
Mobil {Warna, Model, Merek}
Sebuah mobil memiliki atribut Warna, Model dan Merek oleh karena itu tidak masuk akal untuk memiliki metode SetColor atau SetModel karena secara simbolis kita tidak meminta Mobil untuk mengatur warnanya sendiri.
Jadi jika Anda memetakan kasus properti / metode ke objek kehidupan nyata atau melihatnya dari sudut pandang symantic, kebingungan Anda akan hilang.
sumber
Juga nilai tambah besar untuk Properti adalah bahwa nilai properti dapat dilihat di Visual Studio selama debugging.
sumber
Saya lebih suka menggunakan properti untuk menambahkan / mengatur metode dengan 1 parameter. Jika parameter lebih banyak, gunakan metode.
sumber
Properti seharusnya hanya set sederhana dan mendapatkan satu liner. Lebih dari itu dan itu benar-benar harus dipindahkan ke suatu metode. Kode kompleks harus selalu dalam metode.
sumber
Saya hanya menggunakan properti untuk akses variabel, yaitu mendapatkan dan menyetel variabel individual, atau mendapatkan dan menyetel data dalam kontrol. Segera setelah segala jenis manipulasi data diperlukan / dilakukan, saya menggunakan metode.
sumber
Sebagai masalah desain Properti mewakili Data atau Atribut objek kelas, Sedangkan metode adalah tindakan atau perilaku objek kelas.
Di .Net, dunia ada implikasi lain menggunakan Properties:
Kesalahpahaman (IMHO) tentang penggunaan Properti:
Dalam contoh di sini bisa saja ditulis, dengan lebih banyak arti bisnis sebagai:
public String Title { set { Label.Text = text; } }
sumber
Properti sangat bagus karena dapat diakses oleh perancang visual studio visual, asalkan mereka memiliki akses.
Mereka digunakan jika Anda hanya mengatur dan mendapatkan dan mungkin beberapa validasi yang tidak mengakses sejumlah besar kode. Hati-hati karena membuat objek kompleks selama validasi tidaklah sederhana.
Metode lain adalah cara yang disukai.
Ini bukan hanya tentang semantik. Penggunaan properti yang tidak tepat mulai menimbulkan keanehan pada perancang visual studio visual.
Misalnya saya mendapatkan nilai konfigurasi dalam properti kelas. Kelas konfigurasi sebenarnya membuka file dan menjalankan kueri sql untuk mendapatkan nilai konfigurasi itu. Hal ini menyebabkan masalah pada aplikasi saya di mana file konfigurasi akan dibuka dan dikunci oleh studio visual itu sendiri daripada aplikasi saya karena tidak hanya membaca tetapi menulis nilai konfigurasi (melalui metode penyetel). Untuk mengatasinya, saya hanya perlu mengubahnya menjadi sebuah metode.
sumber
Berikut adalah seperangkat pedoman yang baik tentang kapan menggunakan properti vs metode dari Bill Wagner
Panggilan berulang ke setter (dengan nilai yang sama) seharusnya tidak menghasilkan perbedaan dari satu panggilan.
Get tidak boleh mengembalikan referensi ke struktur data internal (Lihat item 23). Suatu metode dapat mengembalikan salinan dalam, dan dapat menghindari masalah ini.
* Diambil dari jawaban saya untuk pertanyaan duplikat.
sumber
Ini sederhana.
1: Gunakan properti ketika Anda ingin data Anda harus divalidasi sebelum disimpan di lapangan. Jadi dengan cara ini properti menyediakan enkapsulasi untuk bidang Anda. Karena jika Anda meninggalkan bidang Anda, pengguna akhir publik dapat menetapkan nilai apa pun yang mungkin atau mungkin tidak valid sesuai kebutuhan bisnis Anda seperti usia harus lebih dari 18. Jadi sebelum nilai menyimpan bidang yang sesuai, kita perlu memeriksa validitasnya. Dengan cara ini properti merepresentasikan data.
2: Gunakan metode ketika Anda ingin melakukan beberapa tindakan seperti Anda menyediakan beberapa data sebagai parameter dan metode Anda melakukan beberapa pemrosesan berdasarkan nilai yang diberikan dan mengembalikan nilai yang diproses sebagai output. Atau Anda ingin mengubah nilai beberapa bidang dengan perhitungan ini. "Dengan cara ini metode merepresentasikan tindakan".
sumber
Saya berasal dari java dan saya menggunakan get .. set .. method untuk sementara waktu.
Ketika saya menulis kode, saya tidak bertanya pada diri sendiri: "mengakses data ini sederhana atau memerlukan proses yang berat?" karena banyak hal dapat berubah (hari ini mendapatkan kembali properti ini sederhana, tomonrow dapat memerlukan beberapa atau proses yang berat).
Hari ini saya memiliki metode SetAge (int age) tomonrow saya juga akan memiliki metode SetAge (tanggal lahir) yang menghitung usia menggunakan tanggal lahir.
Saya sangat kecewa bahwa compiler mengubah properti dalam get dan set tetapi tidak menganggap metode Get ... and Set .. saya sebagai sama.
sumber