C # 'daki değişken adlarında @ karakterinin kullanımı / anlamı nedir?


298

Değişken adınızı C # 'da' @ 'karakteriyle başlatabileceğinizi keşfettim. C # projemde Java ile yazılmış bir web hizmeti (projeme bir web başvurusu ekledim) kullanıyordum. WSDL'de tanımlanan arabirim nesnelerinden birinde "params" adında bir üye değişken vardı. Açıkçası bu C # 'da ayrılmış bir sözcük olduğundan, "params" adında bir üye değişkeni olan bir sınıfa sahip olamazsınız. Oluşturulan proxy nesnesi şuna benzer bir özellik içeriyordu:

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

VS 2008 c # belgelerini aradım ama bu konuda bir şey bulamadım. Ayrıca Google'da arama yapmak bana herhangi bir yararlı yanıt vermedi. Peki, bir değişken / özellik adında '@' karakterinin tam anlamı veya kullanımı nedir?

Yanıtlar:


306

Doğrudan C # Dil Spesifikasyonundan , Tanımlayıcılar (C #) :

"@" Öneki, diğer programlama dilleriyle arayüz oluştururken yararlı olan anahtar sözcüklerin tanımlayıcı olarak kullanılmasını sağlar. @ Karakteri aslında tanımlayıcının bir parçası değildir, bu nedenle tanımlayıcı önek olmadan diğer dillerde normal tanımlayıcı olarak görülebilir. @ Önekine sahip tanımlayıcıya kelimesi kelimesine tanımlayıcı adı verilir.


2
.NET'in hedeflenen en düşük sürümü @nedir?
serhio

16
.NET kendisi @sembolü böyle tanımlamaz , C # dil belirtimi yapar. İlk sürümü olan C # 1.0'dan (.NET 1.0 ile piyasaya sürüldü) beri bunu destekledi. csharpindepth.com/articles/chapter1/Specifications.aspx
Tim S.

9
Ve merak edenler için, VB.NET'te [ ]bir sözcük tanımlayıcısı belirtmek için kullanabilirsiniz Dim [String] As String.
MicroVirus

74

Ayrılmış bir kelimeyi değişken adı olarak kullanmanızı sağlar. IMHO önerilmez (sahip olduğunuz durumlar hariç).


6
@rslite: +1 Tavsiye
edilmiyor

4
> asla +1 Tavsiye edilmez, ama asla asla deme. Örneğin, tanımlayıcı olarak C # anahtar sözcüğünü kullanan eski bir COM arabirimi uygulamanız gerekebilir. Veya Microsoft, Çerçevenin yeni sürümlerinde yeni anahtar kelimeler ekleyebilir - örneğin, bir .NET 1.1 Tahvil ticareti uygulamasında getiri :)
Joe

2
@Joe: Yeni yieldanahtar kelime ayrılmış bir sözcük değildir ve yalnızca hiçbir tanımlayıcının yasal olarak görünemeyeceği bağlamlarda kullanılabilir . C # için yeni özellikler tasarlamanın bir amacı, bunları yeni bir özellik eklenmeden önce yasal olacak herhangi bir programın daha sonra yasal olacak ve aynı anlama sahip olacak şekilde yapılandırılmasıdır .
supercat

6
@Html.TextboxFor( , , , new { @class="my-css-class" } )HTML'yi manuel olarak yazmak zorunda kalmadan veya daha sonraki bir aşamada javascript'in özellikleri değiştirmesine gerek kalmadan gerçekten etrafta dolaşamayacağınız iyi bir örnektir.
flater

Açık Kaynak yazılımında, tüm değişkenlerin C # kodunda "@" simgesiyle ön ekli olduğu yeni bir eğilim vardır. Bunun değişkenler için PHP yazılımında bu gereksinimin aşinalık nedeniyle olabileceğine inanıyorum. Ve bir çok Açık Kaynak web sistemi artık C # ile kodlanmıştır (geçmişte PHP olurdu)
Wasted_Coder

36

C # 'da at (@) karakteri, dil spesifikasyonundaki ilgili kurallara açıkça uymayan değişmez değerleri belirtmek için kullanılır.

Özellikle, ayrılmış anahtar kelimelerle çakışan değişken adları için kullanılabilir (örn. Params kullanamazsınız, ancak bunun yerine @params kullanabilirsiniz, out / ref / dil belirtimindeki diğer anahtar kelimelerle aynı). Ek olarak, çıkış karakteri olmayan dizgi değişmezleri için kullanılabilir; bu özellikle yol sabitleri ile ilgilidir, örneğin path = "c:\\temp\\somefile.txt"yazmak yerine path = @"c:\temp\somefile.txt". Ayrıca düzenli ifadeler için gerçekten yararlıdır.


Sözleşmenin "kelimesi kelimesine" veya " burada dizeleri " ile parametre adlandırma arasında aynı olması ilginç bir nokta (ve yararlı anımsatıcı) .
ruffin

13

Perl'in işaretlerinden farklı olarak @, C # 'da değişken adından önceki bir önekin anlamı yoktur. Eğer xbir değişkendir, @xaynı değişkenin başka adıdır.

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

Ancak, @önekin keşfettiğiniz gibi bir kullanımı var - C # 'ın aksi halde yasadışı olarak reddedeceği değişken adlarını açıklığa kavuşturmak için kullanabilirsiniz.

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

> string @string;

10

@Sembol değişken adı için ayrılmış anahtar kelimeler kullanmaya olanak verir. gibi @int, @string, @doublevb

Örneğin:

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

Yukarıdaki kod iyi çalışıyor, ancak aşağıda çalışmaz:

string public = "This will not compile";

4

Ayrılmış sözcükleri değişken adları olarak kullanmanızı sağlar. eventGeçen gün denilen bir var istedim . Onun _eventyerine gidecektim , ama meslektaşım bana bunun @eventyerine sadece arayabileceğimi hatırlattı .


3

Diğer bir kullanım örneği genişletme yöntemleridir. İlk özel parametre @thisadıyla gerçek anlamını göstermek için ayırt edilebilir . Bir örnek:

public static TValue GetValueOrDefault<TKey, TValue>(
    this IDictionary<TKey, TValue> @this,
    TKey key,
    TValue defaultValue)
    {
        if (!@this.ContainsKey(key))
        {
            return defaultValue;
        }

        return @this[key];
    }

1

Bir tanımlayıcının adı olarak bir anahtar kelime kullanırsak, derleyici hatası “tanımlayıcı bekleniyor, 'Tanımlayıcı Adı' bir anahtar kelimedir” alırız Bu hatanın üstesinden gelmek için tanımlayıcıya "@" önekini ekleyin. Bu tanımlayıcılar kelimesi kelimesine tanımlayıcılardır. @ Karakteri aslında tanımlayıcının bir parçası değildir, bu nedenle tanımlayıcı önek olmadan diğer dillerde normal tanımlayıcı olarak görülebilir


1

Ayrılmış anahtar kelimeleri aşağıdaki gibi değişken adı olarak kullanmak için kullanabilirsiniz

 int @int = 3; 

derleyici @değişkeni yoksayar ve derler.int

düşünceyi kullanmak yaygın bir uygulama değildir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.