#تحديد التوجيه المترجم في C#
-
26-09-2019 - |
سؤال
في 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;