it-swarm-id.com

Apa gunanya / arti dari karakter @ dalam nama variabel di C #?

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 tampak seperti ini:

public ArrayList @params {
    get { return this.paramsField; }
    set { this.paramsField = value; }
}

Saya mencari melalui dokumentasi 2008 VS # 2008 tetapi tidak dapat menemukan apa-apa tentang itu. Pencarian di Google juga tidak memberi saya jawaban yang berguna. Jadi apa arti sebenarnya atau penggunaan karakter '@' dalam nama variabel/properti?

287
Remko Jansen

Langsung dari C # Spesifikasi Bahasa , Pengidentifikasi (C #) :

Awalan "@" memungkinkan penggunaan kata kunci sebagai pengidentifikasi, yang berguna saat berinteraksi dengan bahasa pemrograman lain. Karakter @ sebenarnya bukan bagian dari pengidentifikasi, sehingga pengidentifikasi dapat dilihat dalam bahasa lain sebagai pengidentifikasi normal, tanpa awalan. Pengidentifikasi dengan awalan @ disebut pengidentifikasi kata demi kata.

294
Atif Aziz

Itu hanya memungkinkan Anda menggunakan Word yang dicadangkan sebagai nama variabel. Tidak direkomendasikan IMHO (kecuali dalam kasus seperti yang Anda miliki).

70
rslite

Dalam C # the at (@) karakter digunakan untuk menunjukkan literal yang secara eksplisit tidak mematuhi aturan yang relevan dalam spesifikasi bahasa.

Secara khusus, 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 jalur, mis. dari pada path = "c:\\temp\\somefile.txt" kamu bisa menulis path = @"c:\temp\somefile.txt". Ini juga sangat berguna untuk ekspresi reguler.

35
Tomer Gabel

Tidak seperti sigils Perl, sebuah @ awalan sebelum nama variabel dalam C # tidak memiliki arti. Jika x adalah variabel, @x adalah nama lain untuk variabel yang sama.

> string x = "abc";
> Object.ReferenceEquals(x, @x).Dump();
True

Tetapi @ awalan memang memiliki se, seperti yang Anda temukan - Anda dapat menggunakannya untuk mengklarifikasi nama variabel yang oleh C # akan ditolak sebagai ilegal.

> string string;
Identifier expected; 'string' is a keyword

> string @string;
12
Colonel Panic

@ simbol memungkinkan Anda untuk menggunakan kata kunci yang dipesan untuk nama variabel. seperti @int, @string, @double dll.

Sebagai contoh:

string @public = "Reserved Keyword used for me and its fine";

Kode di atas berfungsi dengan baik, tetapi di bawah ini tidak akan berfungsi:

string public = "This will not compile";
9
Umar Abbas

Ini hanya memungkinkan Anda untuk menggunakan kata-kata yang dipesan sebagai nama variabel. Saya ingin var bernama event tempo hari. Saya akan pergi dengan _event Sebaliknya, tetapi kolega saya mengingatkan saya bahwa saya bisa menyebutnya @event sebagai gantinya.

4
Mark Embling

Kasus penggunaan lain adalah dalam metode ekstensi. Parameter pertama dan khusus dapat dibedakan untuk menunjukkan arti sebenarnya dengan @this nama. Sebuah contoh:

public static TValue GetValueOrDefault<TKey, TValue>(
    this IDictionary<TKey, TValue> @this,
    TKey key,
    TValue defaultValue)
    {
        if ([email protected](key))
        {
            return defaultValue;
        }

        return @this[key];
    }
2
BartoszKP

Jika kami menggunakan kata kunci sebagai nama untuk pengenal, kami mendapatkan kesalahan kompiler "pengidentifikasi yang 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

1
raji vineeth

Anda dapat menggunakannya untuk menggunakan kata kunci yang dipesan sebagai nama variabel suka

 int @int = 3; 

kompiler akan mengabaikan @ dan kompilasi variabel tersebut sebagai int

itu bukan praktik umum untuk menggunakan pikiran

1
Mina Gabriel