Apa yang setara dengan Java final
di C #?
c#
access-modifiers
reserved-words
Nosrama
sumber
sumber
Jawaban:
Kata
final
kunci memiliki beberapa penggunaan di Jawa. Ini sesuai dengan kata kuncisealed
danreadonly
dalam C #, tergantung pada konteks di mana ia digunakan.Kelas
Untuk mencegah subclassing (warisan dari kelas yang ditentukan):
Jawa
C #
Metode
Cegah pengubahan
virtual
metode.Jawa
C #
Seperti yang ditunjukkan oleh Joachim Sauer, perbedaan penting antara kedua bahasa di sini adalah bahwa Java secara default menandai semua metode non-statis
virtual
, sedangkan C # menandai mereka sebagaisealed
. Oleh karena itu, Anda hanya perlu menggunakansealed
kata kunci dalam C # jika Anda ingin berhenti menimpa metode yang telah ditandai secara eksplisitvirtual
di kelas dasar.Variabel
Untuk hanya mengizinkan variabel ditugaskan satu kali:
Jawa
C #
Sebagai catatan tambahan, efek dari
readonly
kata kunci berbeda dariconst
kata kunci di manareadonly
ekspresi dievaluasi pada saat runtime daripada waktu kompilasi , sehingga memungkinkan ekspresi sewenang-wenang.sumber
readonly
variabel anggota dapat dimodifikasi dalam konstruktor: pastebin.com/AzqzYGiAItu tergantung pada konteksnya.
final
kelas atau metode, padanan C # adalahsealed
.final
bidang, ekuivalen C # adalahreadonly
.final
variabel lokal atau parameter metode, tidak ada persamaan langsung C #.sumber
For a final local variable or method parameter, there's no direct C# equivalent
perbedaan besar.const
hanya dapat digunakan pada tipe nilai. Sejauh yang saya tahu tidak ada cara untuk membuat konstanta yang efektif untuk tipe referensi lokal.Apa yang tidak ada di semua orang di sini adalah jaminan Java atas penugasan yang pasti untuk variabel anggota akhir.
Untuk kelas C dengan variabel anggota akhir V, setiap jalur eksekusi yang mungkin melalui setiap konstruktor C harus menetapkan V tepat sekali - gagal menetapkan V atau menetapkan V dua atau lebih kali akan menghasilkan kesalahan.
Kata kunci hanya-baca C # tidak memiliki jaminan seperti itu - kompiler lebih dari senang untuk membiarkan anggota yang hanya dibaca tidak ditugaskan atau memungkinkan Anda untuk menetapkannya beberapa kali dalam konstruktor.
Jadi, final dan readonly (setidaknya sehubungan dengan variabel anggota) jelas tidak setara - final jauh lebih ketat.
sumber
Seperti yang disebutkan,
sealed
setarafinal
dengan metode dan kelas.Sedangkan sisanya, itu rumit.
Untuk
static final
bidang,static readonly
adalah hal terdekat yang mungkin. Ini memungkinkan Anda untuk menginisialisasi bidang statis dalam konstruktor statis, yang cukup mirip dengan penginisialisasi statis di Jawa. Ini berlaku untuk konstanta (primitif dan objek tidak berubah) dan referensi konstan untuk objek bisa berubah.The
const
pengubah cukup mirip untuk konstanta, tetapi Anda tidak dapat mengatur mereka dalam konstruktor statis.readonly
dapat digunakan. Itu tidak sama meskipun -final
membutuhkan tepat satu tugas bahkan dalam konstruktor atau penginisialisasi.Tidak ada yang setara dengan C # untuk
final
variabel lokal yang saya ketahui. Jika Anda bertanya-tanya mengapa ada orang yang membutuhkannya: Anda dapat mendeklarasikan variabel sebelum if-else, switch-case atau lebih. Dengan menyatakan itu final, Anda menegaskan bahwa itu ditetapkan paling banyak satu kali.Variabel lokal Java secara umum harus ditugaskan setidaknya satu kali sebelum dibaca. Kecuali jika cabang melompat sebelum nilai dibaca, variabel terakhir ditetapkan tepat sekali. Semua ini diperiksa waktu kompilasi. Ini membutuhkan kode berperilaku baik dengan sedikit margin untuk kesalahan.
Disimpulkan, C # tidak memiliki padanan langsung dengan
final
. Sementara Java tidak memiliki beberapa fitur bagus dari C #, itu menyegarkan bagi saya karena kebanyakan programmer Java untuk melihat di mana C # gagal untuk memberikan yang setara.sumber
Final kelas Java dan metode final -> disegel. Final variabel anggota Java -> hanya untuk konstanta runtime, const untuk konstanta waktu kompilasi.
Tidak ada padanan untuk final Variabel Lokal dan argumen metode akhir
sumber
http://en.csharp-online.net/CSharp_FAQ:_What_are_the_differences_between_CSharp_and_Java_constant_declarations
Konstanta C # dideklarasikan menggunakan kata kunci const untuk konstanta waktu kompilasi atau kata kunci readonly untuk konstanta runtime. Semantik konstanta sama dalam bahasa C # dan Java.
sumber
tertutup
sumber