سؤال

أنا أعرف أنه لا يمكنك استخدام الميراث مع enums ، حتى في الفئة الأساسية أريد تعريف هذه الفئات التي تنفذ يجب إعادة التعداد من نوع العقار.

من الناحية المثالية, هذا من شأنه أن يكون مثل:

public abstract BaseEnum MyEnum { get; set; }

ثم جميع منفذي أن عودة بعض شكل من التعداد.ولكن من الواضح BaseEnum لا وجود لها.يمكنني استخدام كائن, لكن لا أفضل.

هل هناك طريقة لطيفة من فعل هذا ؟

تحرير: أنا أسأل هذا لأنني في الأساس تريد أن تبقي اسم الخاصية في تنفيذ فصول نفسه - وأنا أعلم أنني لن تكون قادرة على العمل مع التعداد في الفئة الأساسية, ولكن إذا لم أضع ذلك في القاعدة ثم تنفيذ دروس يمكن أن تقرر من تلقاء نفسها أسماء الملكية عن التعداد ، والتي يمكن أن تصبح غير واضحة مع مرور الوقت ، كما أن الانجراف نحو بهم تطبيقات.

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

المحلول

الأقرب يمكنك أن تأتي بسهولة في C# هو جعل نوع عامة مع البنية القيد:

public abstract class BaseClass<T> where T : struct
{
    public abstract T MyEnum { get; set; }
}

ثم

public class DerivedClass : BaseClass<SomeEnum>

C# لن تسمح لك تحديد القيود التي تقيد إلى أنواع التعداد ، على الرغم من CLI لا تدعم ذلك.لدي مشروع يسمى المقيد اللحن والذي يستخدم بعد بناء الحيل لفرض مثل هذه القيود - ولكن أنا لا أقترح عليك أن تتخذ نفس النهج إلا إذا كنت تشعر نوعا ما جريئة.البنية الجبرية على الأقل سوف يحد لك أن قيمة الأنواع التي قد تكون جيدة بما فيه الكفاية.

نصائح أخرى

كل Enums ترث من النظام.Enum.

يجب أن نلقي نظرة هنا: التعداد "الميراث":

See section 8.5.2 of the CLI spec for the full details.
Relevant information from the spec

 * All enums must derive from System.Enum
 * Because of the above, all enums are value types and hence sealed
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top