يجب أن يتم استبدال ثابت المتغيرات مع تتضمن التعدادات؟

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

  •  20-08-2019
  •  | 
  •  

سؤال

وهكذا كنت أبحث في بعض التعليمات البرمجية التي تم إيداعه، وحصلت في حيرة في جميع أنحاء:

// Amount of days before cancellation can't be done
enum Cancellation { Limit = 2 };

والمطلوب الرجل الذي تأكدت منه في جادل بأن من الأفضل بكثير لاستخدام تتضمن التعدادات بدلا من المتغيرات ثابتة، bettern من هذا:

private static int CANCELLATION_LIMIT = 2;

وهكذا بدأنا معتبرة. وكانت حجتي أنه كان يستخدم التعداد باعتبارها وسيلة لتخزين القيم (انها سوف كسر إذا كان هناك اثنين من رموز التعداد بنفس القيمة). وجادل كان النموذج المضاد لمتغيرات ثابتة في فئة.

وسؤالي هو ما ينبغي أن تستخدم أفضل الممارسات سواء لل؟

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

المحلول

ويتم كتابتها تتضمن التعدادات.

وهذا هو، إذا كان لديك طريقة التي لديك لتمرير "الدولة" معينة لطريقة على سبيل المثال، يمكنك تمرير فقط الحجج 'صالح'. على سبيل المثال:

enum OrderState 
{
  pending = 1,
  shipped = 2
}

public IList<Order> GetOrdersInState( OrderState )
{
}

وهذا هو مثال جيد -imho- استخدام تتضمن التعدادات. عندما OrderState هو كثافة العمليات التي تقوم بإنشائها 2 [إينتس] CONST، لديك أي قيود وتكون قادرة على تمرير قيم غير صالحة. والمترجم لا يشكو.

ومع ذلك، فإن القضية التي كنت تنشئة، أعتقد أن استخدام تتضمن التعدادات ليس حلا صحيحا. إنها إساءة استخدام باستخدام الباحث، ويجب استخدام كثافة CONST.

وتتضمن التعدادات جيدة، ولكن يجب استخدامها حيث يجب أن تستخدم. انهم ليسوا الأداة المفضلة في كل حالة. وجود CONST أو فار ثابت في هذه الحالة ليس النموذج المضاد.

نصائح أخرى

وعودة "هل من المنطقي مجموعة من القيم"؟ "التعداد هو مناسب": "CONST ثابت على ما يرام"

(أنا معجب كبير من متسقة منطقيا)

لا، كيف تعرف متغيرات السلسلة ثابتة أو القيم العشرية في التعداد؟

وأنا لا أعتقد أن CANELLATION_LIMIT يبدو وكأنه التعداد، التي عادة ما تكون مجموعة من الخيارات.

لشيء مختلف، إذا كان const، ثم ربما ... ولكن حاليا هو حقل قابلة للتغيير؟

لاحظ أن تتضمن التعدادات تقتصر على أنواع صحيح المستندة، لذلك لا يمكن استخدامها لfloat، string، وما إلى ذلك.

لقيم ثابتة يقصد بها أن تكون فريدة من نوعها، التعدادات هي وسيلة للذهاب. والسؤال الذي يطرح نفسه هو بسيط: يجب تخزين الكائن القيمة نفسها، حتى ثابت؟ في كثير من الحالات، مثل عندما تصف أخطاء أو العمل، فإن الجواب هو لا. تذكر، <م> التعداد ق ولد ليكون بديلا لل<م> تعريف # : فهو يربط القيم النموذجية مع معرفات وأنه يوفر نوع، فإنه لا يقول الحقيقة "مخزن هذا الثابت هنا ".

وأفترض أنك لا تريد في الواقع لتخزين أي شيء، ولكن تقديم هذه القيم النموذجية. CONST ثابت أعضاء مفيدة فقط عندما كنت تنوي استخدامها على هذا النحو، على سبيل المثال إذا كنت بحاجة إلى تمرير لهم بالرجوع إلى أسلوب.

وأعتقد أنه يجب استخدام تتضمن التعدادات إذا كان لديك مجموعة من القيم ترتبط مباشرة.

وشيء من هذا القبيل: الحالة التعداد {المفتوحة = 1، مغلقة = 2، الانتظار = 3}؛

لشيء آخر، وأنا أقول المتغيرات ثابتة هي وسيلة للذهاب.

وأنا لا أعرف أنه هو نموذج مضاد لديك متغيرات ثابتة في فئة (؟). على سبيل المثال، وفئة اللون في .NET Framework لديها الكثير من المتغيرات العمومية ثابتة، مثل Color.Red. لذلك، من هذا المنظور، وأود أن أتفق معك.

ومع ذلك، قد يكون هناك حلا وسطا: استخدام الخاص CONST CANCELLATION_LIMIT = 2؛ وكلا الخاصة بك ينبغي أن تكون سعيدا. بالنسبة له، لن يكون هناك متغير عالمي لفئة (؟)، كما سيتم استبدال consts من قبل المجمع، وسوف تحصل على نقطة واحدة من التغيير مع اسم واضح.

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