2016-10-07 3 views
1

Meine Frage bezieht sich auf das folgende Beispiel, das ich angegeben habe. Ich denke, das ist ein Anti-Muster. Nicht sicher, ob es einen Namen hat. Was ich möchte, ist, auf die spezifischen Implementierungen zugreifen zu können. Beim Versuch, Antworten zu vermeiden, die nur eine Meinung darüber sein könnten, ob dieses Muster schlecht/gut ist, würde ich gerne einen besseren Weg finden, dieses Problem zu überdenken, und wenn es einen Namen für dieses (Anti-) Muster gibt.Umwandlung eines Schnittstellentyps in eine implementierende Klasse

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

Ich kann nicht nur die richtigen Worte googeln werden, so dass jede Hilfe, die mich führen zu würde es zu –

+0

Ihr Beispiel schön falsch ist. 'Typ Typ = Typ.A;' in 'Schnittstelle A' und' Typ Typ = Typ.B; 'in' Schnittstelle B' sind nicht gültig. Schnittstellen können keine Implementierung haben. Auch Sie brauchen den Typ nicht. – shadow

+0

Ich denke, wir werden nur nit wählerisch, wenn man bedenkt ich keine Sprache erwähnt hat, wenn es nur von der Schnittstelle A und B denken, hilft als abstrakte Klassen –

Antwort

0

Warum müssen Sie einen anderen Namen angeben? In diesem Fall ist diese beste Weg ist, wie folgt aus:

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

So methodA und methodeB waren nur Beispiele für eine andere Methode nicht etwas mit WTf geteilt –

+0

Wenn Sie diese Klasse ändern können, warum geben Sie ihnen keine gemeinsame Methode? –

Verwandte Themen