الكلمة الرئيسية "الديناميكية" ... هل هي في الحقيقة كلمة رئيسية محجوزة أو مجرد معرف يعني شيئًا مميزًا عند استخدامه كنوع؟

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

سؤال

لدي محلل C# 4.0. إنه يقبل "ديناميكي" ككلمة رئيسية كنوع. رحلات المحلل الخاص بي حول البيانات الموجودة في برامج العمل C# 3.0 من شكل:

dynamic = <exp> ;

إذن ، إنها ديناميكية حقًا؟ أو هل لا يزال من الممكن استخدامه كاسم معرف تعسفي؟ (إذا كان الأمر كذلك ، فلماذا لا تعامل "int" بنفس الطريقة)؟

هل هناك مواصفات مرجعية في مكان ما ما إذا كانت الديناميكية هي الكلمة الرئيسية؟ لا تذكر أحدث مواصفات ECMA C# 4 حتى "ديناميكية" ، وأفضل ما يمكنني العثور عليه في موقع MS هو "مواصفات أولية" تقول إنها كلمة رئيسية لكنني أظن أن هذه الكتابة هي مجرد كتابة قذرة.

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

المحلول

dynamic هي الكلمة الرئيسية السياقية اعتبارًا من C# 4.0. لا تشير الطبعة الرابعة من ECMA C# Spec إلى C# 4.0. (لاحظ تاريخ نشر 2006.)

MSDN يصفها بأنها كلمة رئيسية.

إنه أيضًا في هذا جدول الكلمات الرئيسية السياقية. (حرك الفأرة لأسفل.)

نصائح أخرى

إنها ليست كلمة رئيسية "عادية" مثل if, for إلخ.

انه السياق الكلمة الرئيسية مثل yield, from إلخ.

على وجه الخصوص ، هذا يجمع:

object dynamic = 0; // dynamic is a contextual keyword

لكن هذا لا:

object string = 0; // string is a regular keyword

يجب عليك "الهروب" string مثله:

object @string = 0;

هذا منطقي للغاية فيما يتعلق بالتوافق المتخلف: من غير المحتمل أن يكون الكثير من الناس قد خلقوا أ يكتب اتصل dynamic (والتي من شأنها أن تسبب الغموض ؛ IIRC الفوز "الحقيقي" في هذه الحالة) بينما هو جداً على الأرجح أن الكود الحالي يستخدم المتغيرات تسمى dynamic.

في بعض النواحي ، لا تحتاج حتى إلى أن تكون كلمة رئيسية سياقية (ولا أعتقد أن المواصفات تشير إليها بشكل صريح على هذا النحو) - يمكنك التفكير في ذلك كاسم لنوع متاح دائمًا (مثل string و object). أتصور ذلك string تم صنع ETC كلمات رئيسية من V1 لتجنب الالتباس ، ولكن إضافة كلمات رئيسية حقيقية (والتي لا يمكن استخدامها كمعرفات) سيكون لها تكلفة توافق عالية الآن.

إنها كلمة رئيسية. (انظر التحرير أدناه) أنا مرتبك قليلاً بشأن ما تعنيه بـ "لماذا لا تعامل" int "بنفس الطريقة؟"

لا يمكنك القيام بذلك: int int = 5;

ولكن يمكنك القيام بذلك ، على الرغم من أنها ليست ممارسة جيدة: int @int = 5;

ال C# 4.0 المواصفات لا تذكر dynamic في القسم 20.1.

تحرير: مزيد من المعلومات ...

يُسمح باستخدام Dynamic كاسم متغير ، لذا فهي ليست كلمة رئيسية (لكنها كلمة رئيسية سياقية - انظر منشور شون ديفلين). انظر لقطة الشاشة أدناه باستخدام .NET 4.0 BETA

dynamic

تحقق من كريس بورو مشاركة مدونة. اقتباس مثير للاهتمام من المنشور:

كما ترون ، فإن الأعضاء المرئيين للجمهور الذين يستخدمون النوع الديناميكي في الواقع ، وراء الكواليس ، يستخدمون كائن النوع عند انبعاثهم. لا يوجد نوع إطار "ديناميكي". ومع ذلك ، تم تزيين جميع هذه "الأشياء" بطريقة يمكن للمترجم (أو أي شخص آخر) معرفة أنه من المفترض أن يتم التعامل معه ديناميكيًا.

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