Saya menemukan bahwa Anda dapat memulai nama variabel Anda dengan karakter '@' di C #. Dalam proyek C # saya, saya menggunakan layanan web (saya menambahkan referensi web ke proyek saya) yang ditulis dalam Java. Salah satu objek antarmuka yang didefinisikan dalam WSDL memiliki variabel anggota dengan nama "params". Jelas ini adalah kata yang dilindungi undang-undang di C # sehingga Anda tidak dapat memiliki kelas dengan variabel anggota dengan nama "params". Objek proxy yang dihasilkan berisi properti yang terlihat seperti ini:
public ArrayList @params {
get { return this.paramsField; }
set { this.paramsField = value; }
}
Saya mencari melalui dokumentasi VS 2008 c # tetapi tidak dapat menemukan apa-apa tentang itu. Pencarian Google juga tidak memberi saya jawaban yang berguna. Jadi apa arti sebenarnya atau penggunaan karakter '@' dalam nama variabel / properti?
sumber
@
?@
simbol seperti ini, spesifikasi bahasa C # tidak. Ini telah mendukung ini sejak versi pertamanya, C # 1.0 (dirilis dengan .NET 1.0). csharpindepth.com/articles/chapter1/Specifications.aspx[ ]
untuk menentukan pengidentifikasi kata demi kata, misDim [String] As String
.Itu hanya memungkinkan Anda menggunakan kata yang dipesan sebagai nama variabel. Tidak direkomendasikan IMHO (kecuali dalam kasus seperti yang Anda miliki).
sumber
yield
kunci baru bukan kata yang dilindungi undang-undang, dan hanya dapat digunakan pada konteks di mana tidak ada pengidentifikasi yang dapat muncul secara legal . Salah satu tujuan ketika merancang fitur baru untuk C # adalah membangunnya sedemikian rupa sehingga program apa pun yang akan legal sebelum fitur baru ditambahkan akan sah setelahnya dan memiliki arti yang sama .@Html.TextboxFor( , , , new { @class="my-css-class" } )
adalah contoh yang baik di mana Anda tidak dapat benar-benar menyiasatinya tanpa harus menulis HTML secara manual, atau meminta javascript mengubah atribut pada tahap selanjutnya.Dalam C # the at (@) karakter digunakan untuk menunjukkan literal yang secara eksplisit tidak mematuhi aturan yang relevan dalam spesifikasi bahasa.
Khususnya, ini dapat digunakan untuk nama variabel yang berbenturan dengan kata kunci yang dipesan (mis. Anda tidak dapat menggunakan params tetapi Anda dapat menggunakan @params, sama dengan out / ref / kata kunci lain dalam spesifikasi bahasa). Selain itu dapat digunakan untuk string literal yang tidak terhindar; ini sangat relevan dengan konstanta path, misalnya alih-alih
path = "c:\\temp\\somefile.txt"
Anda dapat menulispath = @"c:\temp\somefile.txt"
. Ini juga sangat berguna untuk ekspresi reguler.sumber
Tidak seperti sigils Perl,
@
awalan sebelum nama variabel di C # tidak memiliki arti. Jikax
variabel,@x
adalah nama lain untuk variabel yang sama.Tetapi
@
awalan memang memiliki kegunaan , seperti yang Anda temukan - Anda dapat menggunakannya untuk mengklarifikasi nama variabel yang C # akan ditolak sebagai ilegal.sumber
The
@
simbol memungkinkan Anda untuk menggunakan kata kunci yang disediakan untuk nama variabel. seperti@int
,@string
,@double
dllSebagai contoh:
Kode di atas berfungsi dengan baik, tetapi di bawah ini tidak akan berfungsi:
sumber
Ini hanya memungkinkan Anda untuk menggunakan kata-kata yang dipesan sebagai nama variabel. Saya ingin var menelepon
event
hari lain. Saya akan pergi dengan_event
sebagai gantinya, tetapi rekan saya mengingatkan saya bahwa saya bisa menyebutnya begitu@event
.sumber
Kasus penggunaan lain adalah metode ekstensi. Parameter pertama dan khusus dapat dibedakan untuk menunjukkan arti sebenarnya dengan
@this
nama. Sebuah contoh:sumber
Jika kami menggunakan kata kunci sebagai nama untuk pengenal, kami mendapatkan kesalahan kompiler "pengidentifikasi diharapkan, 'Nama Pengidentifikasi' adalah kata kunci" Untuk mengatasi kesalahan ini, awali pengenal dengan "@". Pengidentifikasi seperti itu adalah pengidentifikasi kata demi kata. Karakter @ sebenarnya bukan bagian dari pengidentifikasi, sehingga pengidentifikasi dapat dilihat dalam bahasa lain sebagai pengidentifikasi normal, tanpa awalan
sumber
Anda dapat menggunakannya untuk menggunakan kata kunci yang dipesan sebagai nama variabel suka
kompiler akan mengabaikan
@
dan mengkompilasi variabel sebagaiint
itu bukan praktik umum untuk menggunakan pikiran
sumber