ما هو استخدام/معنى الحرف @ في أسماء المتغيرات في C#؟

StackOverflow https://stackoverflow.com/questions/91817

  •  01-07-2019
  •  | 
  •  

سؤال

لقد اكتشفت أنه يمكنك بدء اسم المتغير الخاص بك بحرف "@" في لغة C#.في مشروع C# الخاص بي، كنت أستخدم خدمة ويب (أضفت مرجع ويب إلى مشروعي) تمت كتابته بلغة Java.أحد كائنات الواجهة المعرفة في WSDL يحتوي على متغير عضو بالاسم "params".من الواضح أن هذه كلمة محجوزة في لغة C#، لذا لا يمكن أن يكون لديك فئة تحتوي على متغير عضو باسم "params".يحتوي كائن الوكيل الذي تم إنشاؤه على خاصية تبدو كما يلي:

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

لقد بحثت في وثائق VS 2008 c# لكن لم أتمكن من العثور على أي شيء عنها.كما أن البحث في Google لم يمنحني أي إجابات مفيدة.إذن ما هو المعنى الدقيق أو استخدام الحرف "@" في اسم المتغير/الخاصية؟

هل كانت مفيدة؟

المحلول

مباشرة من مواصفات لغة C#, المعرفات (C#) :

تتيح البادئة "@" استخدام الكلمات الرئيسية كمعرفات ، وهو أمر مفيد عند التواصل مع لغات البرمجة الأخرى.الحرف @ ليس في الواقع جزءًا من المعرف ، لذلك يمكن رؤية المعرف بلغات أخرى كمعرف طبيعي ، بدون البادئة.يسمى المعرف مع بادئة @ معرف حرفي.

نصائح أخرى

إنه يتيح لك فقط استخدام كلمة محجوزة كاسم متغير.لا ينصح IMHO (إلا في الحالات التي لديك).

في لغة C#، يُستخدم الحرف at (@) للإشارة إلى القيم الحرفية التي لا تلتزم صراحةً بالقواعد ذات الصلة في مواصفات اللغة.

على وجه التحديد، يمكن استخدامه لأسماء المتغيرات التي تتعارض مع الكلمات الرئيسية المحجوزة (على سبيل المثال.لا يمكنك استخدام المعلمات ولكن يمكنك استخدامparams بدلاً من ذلك، نفس الشيء مع out/ref/أي كلمة رئيسية أخرى في مواصفات اللغة).بالإضافة إلى ذلك يمكن استخدامه لسلسلة حرفية غير قابلة للإلغاء؛وهذا مهم بشكل خاص مع ثوابت المسار، على سبيل المثال.بدلاً من path = "c:\\temp\\somefile.txt" يمكنك كتابة path = @"c:\temp\somefile.txt".كما أنها مفيدة حقًا للتعبيرات العادية.

على عكس سيجيلات بيرل، فإن @ البادئة قبل اسم المتغير في C# ليس لها معنى.لو x هو متغير، @x هو اسم آخر لنفس المتغير.

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

لكن ال @ البادئة لديها يستخدم, كما اكتشفت - يمكنك استخدامه لتوضيح أسماء المتغيرات التي قد ترفضها C# باعتبارها غير قانونية.

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

> string @string;

ال @ يتيح لك الرمز استخدام الكلمات الأساسية المحجوزة لاسم المتغير.يحب @int, @string, @double إلخ.

على سبيل المثال:

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

الكود أعلاه يعمل بشكل جيد، لكن أدناه لن يعمل:

string public = "This will not compile";

إنه يسمح لك ببساطة باستخدام الكلمات المحجوزة كأسماء متغيرة.كنت أرغب في استدعاء var event اليوم الآخر.كنت سأذهب مع _event بدلاً من ذلك، لكن زميلي ذكرني أنه يمكنني أن أسميها فقط @event بدلاً من.

حالة استخدام أخرى هي في طرق التمديد.الأول، يمكن تمييز المعلمة الخاصة للدلالة على معناها الحقيقي @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];
    }

إذا استخدمنا كلمة رئيسية كاسم لمعرف ، فإننا نحصل على خطأ في المعرف "معرف متوقع ،" اسم المعرف "هو كلمة رئيسية" للتغلب على هذا الخطأ ، بادئة المعرف بـ "@".هذه المعرفات هي معرفات حرفية.الحرف @ ليس في الواقع جزءًا من المعرف، لذلك قد يُنظر إلى المعرف في اللغات الأخرى كمعرف عادي، بدون البادئة

يمكنك استخدامه لاستخدام الكلمات الرئيسية المحجوزة كاسم متغير مثل

 int @int = 3; 

سوف يتجاهل المترجم @ وتجميع المتغير ك int

ليس من الممارسات الشائعة استخدام الفكر

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top