2016-10-07 2 views
1

Мой вопрос включает в себя приведенный ниже пример. Я чувствую, что это анти-образец. Не уверен, есть ли у него имя. Я хотел бы иметь доступ к конкретным реализациям. Пытаясь избежать ответов, которые могут быть просто оценены, является ли этот шаблон плохим/хорошим, я хотел бы знать, как лучше пересмотреть эту проблему, и если есть имя для этого (анти) шаблона.Передача интерфейса типа реализующему классу

interface WTF 
{ 
    Type type; 
} 

enum Type 
{ 
    A, 
    B 
} 

interface A : WTF 
{ 
    Type type = Type.A; 

    void MethodA(); 
} 

interface B : WTF 
{ 
    Type type = Type.B; 

    void MethodB(); 
} 



void Foo(List<WTF> list) 
{ 
    foreach(var i in list) 
    { 
    switch(i.type) 
    { 
     case Type.A: 
     A a = (A)i; 
     a.MethodA(); 
     break; 
     case Type.B: 
     B b = (B)i; 
     b.MethodB(); 
     break; 
    } 
    } 
} 
+0

Я не могу быть просто прибегая к помощи правильным слов, так что любая помощь, которая может привести меня было бы приятно –

+0

Ваш пример неправильно. 'Type type = Type.A;' в 'interface A' и' Type type = Type.B; 'в' interface B' недопустимы. Интерфейсы не могут быть реализованы. Также вам не нужен тип. – shadow

+0

Я думаю, что мы просто ничтожны, учитывая, что я не упоминал язык, если он помогает просто думать об интерфейсе A и B как абстрактных классах –

ответ

0

Почему вы должны дать ему другое название? В данном случае это лучший способ, как это:

interface WTF 
{ 
    Type type; 
    void Method(); 
} 

enum Type 

interface A : WTF 
{ 

} 

interface B : WTF 
{ 


} 
void Foo(List<WTF> list) 
{ 
    foreach(var i in list) 
    { 
    i.Method(); 
    } 
} 
+0

Итак, методA и methodB были просто примерами какого-то другого метода, а не что-то общее с WTf –

+0

Если вы можете изменить этот класс, почему бы не дать им общий метод? –

Смежные вопросы