سؤال

في C ، يمكنني إعلان توجيه التحويل البرمجي على النحو التالي:

#define MY_NUMBER 10

ومع ذلك ، في C#، يبدو أنني فقط قادر على القيام بذلك:

#define MY_NUMBER

وهو أمر غير مجدي بشكل واضح في هذه الحالة.

هل هذا صحيح أم أفعل شيئًا خاطئًا؟ إذا لم يكن الأمر كذلك ، هل يمكن لأي شخص أن يقترح طريقة للقيام بذلك ، إما على مساحة الاسم أو مستوى الحل؟ فكرت في إنشاء فئة ثابتة ، لكن يبدو أن هذا مبالغة لقيمة واحدة.

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

المحلول

نعم انه صحيح.

إليك اقتباس من وثائق MSDN:

توفر توجيهات المعالجة المسبقة القدرة على تخطي أقسام ملفات المصدر بشرط ، للإبلاغ عن شروط الخطأ وشروط التحذير ، وتحديد مناطق مميزة من التعليمات البرمجية المصدر. يتم استخدام مصطلح "توجيهات المعالجة المسبقة" فقط للاتساق مع لغات البرمجة C و C ++. في C#، لا توجد خطوة منفصلة للمعالجة المسبقة ؛ تتم معالجة التوجيهات المسبقة للمعالجة كجزء من مرحلة التحليل المعجمية.

لذلك لا يمكنك حقًا تحديد ثوابت المترجم ، كما هو الحال في C و C ++.

موارد ذات الصلة:

نصائح أخرى

تشير الكثير من الإجابات الأخرى إلى استخدام أ public const ميدان. لاحظ أن أ public const سيتم تجميعها في التجميعات التي تشير إليها ، مما يجبرك على إعادة ترجمة ليس فقط التجميع الذي يتم تعريفه فيه ولكن أيضًا كل مجموعة تشير إليها إذا غيرت قيمة const.

إذا لم تكن متأكدًا من أن القيمة لن تتغير أبدًا ، أ public static readonly الحقل هو بديل أفضل.

نعم ، أنت محق. const و readonly هي حقا خياراتك الوحيدة.

يمكنك تحديد const أو ثابت القراءة ، وإذا كنت تريد ذلك بشكل مشروط ، فيمكنك لفه بتوجيه #IF

#if DEBUG
private const int MY_NUMBER = 10;
#else
private const int MY_NUMBER = 20;
#endif

قد ترغب أيضًا في التحقق من التعدادات ، مثل

enum Numbers
{
    Nothing = 0,
    Dads = 5,
    My = 10,
    LittleJims = 25
}

لذا ، بدلاً من c's my_number ، لديك أرقام.

استخدام الجمهور const


بقدر ما أعلم،

لا يستخدم C# تحديد المعالج المسبق لإجراء الاستبدال في الكود ، لذلك يجب عليك استخدام ثابت.

هذا ينبغي أن تفعل خدعة:

public const int MY_NUMBER = 10;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top