سؤال

يرجى النظر في الواجهات التالية:

interface IFile
{
    // Members
};

interface IAudioFile : IFile
{
    // Members
};

interface IVideoFile : IFile
{
    // Members  
};

enum ContentType
{
    Audio,
    Video
};

interface IProvider
{
    HashSet<ContentType> GetSupportedTypes();
    IList<IFile> GetFiles(ContentType contentType);
};

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

أي تعليقات على تصميم الواجهة هي محل تقدير كبير.

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

المحلول

يعتمد حقا على ما تحاول تحقيقه، لكنني خيارات واحدة قد ترغب في إلقاء نظرة عليها باستخدام Generics، بحيث IPRovider هي كذلك giveacodicetagpre.

والتي يمكن تنفيذها مثل giveacodicetagpre.

ودعا مثل giveacodicetagpre.

نصائح أخرى

عادة، من الأفضل أن تكتب شيئًا كهذا:

void method(IFile file) {
    file.DoYourThing();
}

من

void method(ContentType id) {
   switch (id) {
   case ContentType.Audio: 
       file.DoThis();
       break;

   case ContentType.Video: 
       file.DoThat();
       break;
   }
}

وذلك لأن التبديل عادة يصبح كابوسًا للصيانة مع مرور الوقت، كما أنه عرضة للخطأ أيضًا.

توصيتي هي أنه عندما تحتاج switches أو if-else السلاسل التي يجب عليك مراعاتها لإدراج طريقة في التسلسل الهرمي للفئة الموجودة بالفعل أو لإنشاء طريقة جديدة.يجب أن تسعى جاهدة لكتابة تعليمات برمجية تشبه تلك التي تراها في مقتطف التعليمات البرمجية الأول.

كالعادة، هذا عام لذا قد لا ينطبق على مشكلتك الخاصة المطروحة.

أعتقد أن النقطة هنا هي أن القائمة المرتجعة تحتوي على كائنات "قاعدة".

إذا كنت لا تحب ذلك، فيمكنك إنشاء بعض الحملات الزائدة مثل giveacodicetagpre.

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