C # में चर नामों में @ वर्ण का उपयोग / अर्थ क्या है?


298

मुझे पता चला कि आप C # में एक '@' अक्षर के साथ अपना चर नाम शुरू कर सकते हैं। मेरी C # परियोजना में मैं एक वेब सेवा का उपयोग कर रहा था (मैंने अपनी परियोजना में एक वेब संदर्भ जोड़ा) जो जावा में लिखा गया था। WSDL में परिभाषित इंटरफ़ेस ऑब्जेक्ट्स में से एक में "params" नाम के साथ एक सदस्य चर था। स्पष्ट रूप से यह C # में एक आरक्षित शब्द है, इसलिए आपके पास "params" नाम के साथ एक सदस्य चर के साथ एक वर्ग नहीं हो सकता है। जो प्रॉक्सी ऑब्जेक्ट जनरेट किया गया था, उसमें ऐसी प्रॉपर्टी थी जो इस तरह दिखाई देती थी:

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

मैंने VS 2008 c # प्रलेखन के माध्यम से खोज की, लेकिन इसके बारे में कुछ भी नहीं पाया। Google को खोजने से मुझे कोई उपयोगी उत्तर नहीं मिला। तो चर / संपत्ति के नाम में '@' अक्षर का सही अर्थ या उपयोग क्या है?

जवाबों:


306

C # भाषा विशिष्टता , पहचानकर्ता (C #) से सीधे :

उपसर्ग "@" पहचानकर्ताओं के रूप में कीवर्ड के उपयोग को सक्षम करता है, जो अन्य प्रोग्रामिंग भाषाओं के साथ इंटरफेस करते समय उपयोगी होता है। चरित्र @ वास्तव में पहचानकर्ता का हिस्सा नहीं है, इसलिए पहचानकर्ता अन्य भाषाओं में एक सामान्य पहचानकर्ता के रूप में देखा जा सकता है, उपसर्ग के बिना। @ उपसर्ग के साथ एक पहचानकर्ता को एक शब्दशः पहचानकर्ता कहा जाता है।


2
.NET सपोर्टिंग का लक्षित न्यूनतम संस्करण क्या है @?
सेरियो जूल

16
.NET स्वयं @इस तरह प्रतीक को परिभाषित नहीं करता है , C # भाषा विनिर्देश करता है। इसने इसके पहले संस्करण C # 1.0 (.NET 1.0 के साथ जारी) के बाद से इसका समर्थन किया है। csharpindepth.com/articles/chapter1/Specifications.aspx
टिम एस।

9
और सोच रहे लोगों के लिए, VB.NET में आप [ ]एक शब्दशः पहचानकर्ता निर्दिष्ट करने के लिए उपयोग कर सकते हैं , उदा Dim [String] As String
माइक्रोविरस

74

यह आपको एक आरक्षित नाम को एक चर नाम के रूप में उपयोग करने देता है। अनुशंसित नहीं है IMHO (आपके जैसे मामलों को छोड़कर)।


6
@rslite: +1 अनुशंसित नहीं :)
user7116

4
> कभी नहीं +1 की सिफारिश की, लेकिन कभी नहीं कहते हैं। उदाहरण के लिए आपको एक विरासत COM इंटरफ़ेस को लागू करने की आवश्यकता हो सकती है जो एक पहचानकर्ता के रूप में C # कीवर्ड का उपयोग करता है। या Microsoft नए कीवर्ड को फ्रेमवर्क के नए संस्करणों में पेश कर सकता है - जैसे कि .NET 1.1 बॉन्ड ट्रेडिंग ऐप में उपज :)
जो

2
@ जो: नया yieldकीवर्ड एक आरक्षित शब्द नहीं है, और केवल ऐसे संदर्भों पर प्रयोग करने योग्य है जहां कोई पहचानकर्ता कानूनी रूप से प्रकट नहीं हो सकता है । सी # के लिए नई सुविधाओं को डिजाइन करते समय एक लक्ष्य उन्हें इस तरह से बनाना है कि कोई भी कार्यक्रम जो एक नई सुविधा को जोड़ने से पहले कानूनी होगा, बाद में कानूनी होगा और इसका वही अर्थ होगा
सुपरकैट

6
@Html.TextboxFor( , , , new { @class="my-css-class" } )एक अच्छा उदाहरण है जहां आप वास्तव में HTML को मैन्युअल रूप से लिखने के बिना इसके आसपास नहीं पहुंच सकते हैं, या जावास्क्रिप्ट को बाद के चरण में विशेषताओं को बदल सकते हैं।
फ्लोटर

एक नया चलन है जो ओपन सोर्स सॉफ्टवेयर में देखा जाता है जहां सभी चर C # कोड में "@" प्रतीक के साथ उपसर्ग किए जाते हैं। मेरा मानना ​​है कि यह चर के लिए PHP सॉफ्टवेयर में इस आवश्यकता की परिचितता के कारण हो सकता है। और बहुत सारे ओपन सोर्स वेब सिस्टम अब C # में कोडित हो गए हैं (जहाँ अतीत में यह PHP होता होगा)
Wasted_Coder

36

C # में at (@) अक्षर का उपयोग शाब्दिक अर्थों को दर्शाने के लिए किया जाता है जो स्पष्ट रूप से भाषा की युक्ति में संबंधित नियमों का पालन नहीं करते हैं।

विशेष रूप से, इसका उपयोग चर नामों के लिए किया जा सकता है जो आरक्षित खोजशब्दों के साथ टकराते हैं (जैसे कि आप params का उपयोग नहीं कर सकते हैं, लेकिन आप इसके बजाय @params का उपयोग कर सकते हैं, भाषा विनिर्देश में किसी भी अन्य कीवर्ड के बाहर / ref / के साथ)। इसके अतिरिक्त इसका उपयोग बिना स्ट्रिंग स्ट्रिंग शाब्दिक के लिए किया जा सकता है; यह पथ स्थिरांक के साथ विशेष रूप से प्रासंगिक है, जैसे path = "c:\\temp\\somefile.txt"आप लिख सकते हैं path = @"c:\temp\somefile.txt"। यह नियमित अभिव्यक्ति के लिए वास्तव में उपयोगी है।


दिलचस्प बिंदु (और उपयोगी mnemonic) कि सम्मेलन "शब्दशः-" या " यहाँ-तार " और पैरामीटर नामकरण के बीच समान है ।
रफिन

13

पर्ल के सिगिल के विपरीत, @C # में एक चर नाम से पहले एक उपसर्ग का कोई अर्थ नहीं है। यदि xएक चर है, @xउसी चर के लिए एक और नाम है।

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

लेकिन @उपसर्ग का एक उपयोग है , जैसा कि आपने खोजा है - आप इसका उपयोग चर नामों को स्पष्ट करने के लिए कर सकते हैं जो C # अन्यथा अवैध रूप से अस्वीकार कर देंगे।

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

> string @string;

10

@प्रतीक आप चर नाम के लिए आरक्षित कीवर्ड्स का उपयोग करने की अनुमति देता है। जैसे @int, @string, @doubleआदि

उदाहरण के लिए:

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

उपरोक्त कोड ठीक काम करता है, लेकिन नीचे काम नहीं करेगा:

string public = "This will not compile";

4

यह आपको आरक्षित शब्दों को चर नामों के रूप में उपयोग करने की अनुमति देता है। मैं eventदूसरे दिन नामक एक संस्करण चाहता था । मैं _eventइसके बजाय जाने वाला था , लेकिन मेरे सहयोगी ने मुझे याद दिलाया कि मैं इसके @eventबजाय बस फोन कर सकता हूं ।


3

एक अन्य उपयोग मामला विस्तार के तरीके हैं। पहला, विशेष पैरामीटर @thisनाम के साथ इसके वास्तविक अर्थ को दर्शाने के लिए प्रतिष्ठित किया जा सकता है । एक उदाहरण:

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

यदि हम किसी आइडेंटिफ़ायर के नाम के रूप में एक कीवर्ड का उपयोग करते हैं, तो हमें एक कंपाइलर एरर मिलता है "आइडेंटिफ़ायर अपेक्षित", 'आइडेंटिफ़ायर नेम' एक कीवर्ड है "इस एरर को दूर करने के लिए," @ "के साथ आइडेंटिफ़ायर को प्रीफ़िक्स करें। ऐसे पहचानकर्ता शब्दशः पहचानकर्ता होते हैं। चरित्र @ वास्तव में पहचानकर्ता का हिस्सा नहीं है, इसलिए पहचानकर्ता अन्य भाषाओं में एक सामान्य पहचानकर्ता के रूप में देखा जा सकता है, उपसर्ग के बिना


1

आप इसका उपयोग आरक्षित खोजशब्दों को चर नाम की तरह उपयोग करने के लिए कर सकते हैं

 int @int = 3; 

संकलक को अनदेखा करेगा @और चर को संकलित करेगाint

विचार का उपयोग करना कोई आम बात नहीं है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.