Ketika mencoba mengkompilasi kelas saya, saya mendapatkan kesalahan:
Konstanta
'NamespaceName.ClassName.CONST_NAME'
tidak dapat ditandai statis.
di garis:
public static const string CONST_NAME = "blah";
Saya bisa melakukan ini sepanjang waktu di Jawa. Apa yang saya lakukan salah? Dan mengapa tidak membiarkan saya melakukan ini?
Dari spesifikasi bahasa C # (halaman PDF 287 - atau halaman ke 300 dari PDF):
sumber
Anggota const dianggap statis oleh kompiler, serta menyiratkan semantik nilai konstan, yang berarti referensi ke konstanta dapat dikompilasi ke dalam kode menggunakan sebagai nilai dari anggota konstan, bukan referensi ke anggota.
Dengan kata lain, anggota konst yang berisi nilai 10, dapat dikompilasi ke dalam kode yang menggunakannya sebagai angka 10, alih-alih referensi ke anggota const.
Ini berbeda dari bidang hanya baca statis, yang akan selalu dikompilasi sebagai referensi ke bidang.
Catatan, ini adalah pra-JIT. Ketika JIT'ter mulai dimainkan, mungkin mengkompilasi keduanya ke dalam kode target sebagai nilai.
sumber
C #
const
adalah hal yang persis sama dengan Javafinal
, kecuali itu benar-benar selalustatic
. Menurut pendapat saya, itu tidak benar-benar perlu untukconst
variabel menjadi non-static
, tetapi jika Anda perlu mengaksesconst
variabel nonstatic
-ly, Anda dapat melakukan:Nah, sekarang saya menyadari pertanyaan ini ditanyakan 4 tahun yang lalu, tetapi karena saya menempatkan sekitar 2 jam kerja, yang terdiri dari mencoba berbagai macam cara menjawab dan memformat kode, ke dalam jawaban ini, saya masih mempostingnya. :)
Tapi, sebagai catatan, saya masih merasa agak konyol.
sumber
final
berperilaku persis seperti C #readonly
, dan tidak sukaconst
sama sekali.Dari MSDN: http://msdn.microsoft.com/en-us/library/acdd6hb7.aspx
... Juga, sementara bidang const adalah konstanta waktu kompilasi , bidang readonly dapat digunakan untuk konstanta runtime ...
Jadi menggunakan static di bidang const seperti mencoba membuat statis yang didefinisikan (dengan #define) di C / C ++ ... Karena diganti dengan nilainya dalam waktu kompilasi tentu saja ia dimulai sekali untuk semua instance (= statis) .
sumber
const mirip dengan static kita dapat mengakses kedua varables dengan nama kelas tetapi beda adalah variabel statis dapat dimodifikasi dan const tidak bisa.
sumber