Sejauh yang saya tahu, private
adalah standar di mana-mana di C # (yang berarti bahwa jika saya tidak menulis public
, protected
, internal
, dll maka akan private
secara default). (Mohon koreksi saya jika saya salah.)
Jadi, apa alasan untuk menulis kata kunci itu, atau mengapa kata kunci itu ada untuk anggota?
Misalnya, ketika pengendali kejadian dibuat secara otomatis, tampilannya seperti ini:
private void RatTrap_MouseEnter(object sender, CheeseEventArgs e)
{
}
Tetapi mengapa bahkan menulis pribadi jika itu tersirat dan default? Hanya agar pengembang pemula (yang tidak tahu ini adalah C # default) tahu bahwa itu pribadi? Atau apakah ada perbedaan untuk kompilernya?
Selain itu, adakah kasus di mana menulis "private" (sendiri) akan mengubah aksesibilitas anggota?
c#
private
specifications
access-modifiers
auto-generate
Camilo Martin
sumber
sumber
internal
default.Jawaban:
Ini tidak benar. Jenis yang didefinisikan dalam namespace (kelas, struct, antarmuka, dll) akan menjadi internal secara default. Juga, anggota dalam tipe yang berbeda memiliki aksesibilitas default yang berbeda (seperti publik untuk anggota antarmuka). Untuk detailnya, lihat Tingkat Aksesibilitas di MSDN.
Juga,
Menentukan ini secara eksplisit membantu menunjukkan niat Anda untuk menjadikan jenis ini pribadi, dengan sangat eksplisit. Ini membantu menjaga kode Anda dari waktu ke waktu. Ini dapat membantu pengembang lain (atau diri Anda sendiri) mengetahui apakah anggota bersifat pribadi secara default atau sengaja, dll.
sumber
private
.get
danset
default ke aksesibilitas properti itu sendiriKurang tepat - defaultnya adalah "akses paling terbatas yang tersedia untuk deklarasi ini". Jadi misalnya, dengan tipe tingkat atas defaultnya adalah
internal
; untuk tipe bersarang, defaultnya adalahprivate
.Itu membuatnya eksplisit, yang bagus karena dua alasan:
Adapun bagian terakhir Anda:
Ya, untuk membuat separuh properti lebih ketat daripada yang lain:
Saya biasanya menggunakan default di mana pun saya bisa, tetapi saya telah diyakinkan (sebagian oleh Eric Lippert) bahwa memperjelas bahwa Anda telah memikirkannya dan memutuskan untuk membuat sesuatu yang bersifat pribadi adalah ide yang bagus.
Secara pribadi saya berharap ada cara untuk melakukan itu untuk disegel / tidak disegel, juga, untuk deklarasi tipe - bahkan mungkin tidak memiliki default. Saya menduga bahwa banyak pengembang (termasuk saya sendiri jika saya tidak berhati-hati) membiarkan kelas tidak disegel hanya karena usaha yang lebih sedikit daripada membuatnya tersegel.
sumber
final
contoh yang lebih umum.private
menambah kekacauan visual. Kepada mereka yang bersikeras bahwa itu membuat sesuatu menjadi eksplisit, saya akan bertanya: Apakah Anda melakukan ini dengan matematika juga? Misalnya:Apakah Anda merasa tidak jelas tanpa tanda kurung yang berlebihan
b / c
?Aturan di C # sangat sederhana: Secara default, semuanya sedekat mungkin dengan privat. Jadi jika Anda membutuhkan sesuatu agar lebih terlihat daripada default, tambahkan pengubah. Jika tidak, jangan tambahkan kata kunci yang tidak perlu ke kode Anda.
sumber
Friend
untuk anggota, misalnya. C # melakukan visibilitas default dengan cara yang benar: Hal-hal diatur ke visibilitas paling tidak mungkin kecuali jika diubah. Dari apa yang dapat saya temukan, tampaknya hal yang sama berlaku untuk C ++ (kecuali struct). (Tampaknya tidak benar untuk F #.)var
, karena mengurangi kekacauan visual, namun begitu banyak orang yang mendukung pengetikan tanpa tujuanprivate
.Mendeklarasikan pribadi secara eksplisit , berarti Anda tahu itu pribadi. Bukan hanya berpikir begitu, karena sejauh yang Anda tahu, itu adalah default. Ini juga berarti bahwa orang lain yang melihat kode tersebut mengetahui apa itu.
Tidak ada "Saya pikir itu", "Saya cukup yakin itu", dll. Hanya itu . Dan semua orang ada di halaman yang sama.
Saya bukan pengembang C # . Jika saya harus bekerja dengan beberapa kode yang tidak secara eksplisit dinyatakan sebagai pribadi , saya mungkin akan menganggapnya internal .
Saya tidak suka ketika hal-hal diatur secara implisit. Tidak pernah sejelas kapan mereka ditetapkan secara eksplisit.
sumber
Keterbacaan - Tidak semua orang tahu bahwa privat adalah perilaku default.
Intent - Memberikan indikasi yang jelas bahwa Anda telah secara spesifik menyatakan properti tersebut sebagai properti (untuk alasan apa pun).
sumber
Keterbacaan, demonstrasi niat adalah dua alasan besar yang dapat saya pikirkan.
sumber
Satu alasan bagus untuk menentukan visibilitas secara eksplisit adalah agar Anda tidak perlu memikirkan tentang default untuk konteks tempat Anda berada.
Alasan bagus lainnya adalah karena FxCop menyuruh Anda melakukannya.
sumber
Banyak orang (orang-orang seperti saya!) Secara teratur membuat program dalam beberapa bahasa berbeda. Menjadi eksplisit dengan hal-hal seperti ini mencegah saya dari kebutuhan untuk mengingat semua detail misterius dari semua bahasa yang saya programkan.
sumber
private
" adalah detail misterius ... Tapi saya mengerti intinya. Suatu hari saya kesulitan mengingat bagaimana kerangka kerja yang saya gunakan minggu lalu ( MEF ) bekerja.Saya akan mengatakan untuk konsistensi dengan keterbacaan ruang lingkup kelas lainnya.
sumber