Im Rahmen des Code-Refactoring, habe ich einige Code Duplikate gefunden, die ichSchnittstelle Vererbungshierarchie
Ich habe eine Schnittstelle wie eine unten, in einer Baugruppe zu entfernen, versuche ich kann nicht ändern.
public interface IArtifact
{
void Accept(IArtifactVisitor visitor);
}
public interface IArtifactVisitor
{
void Visit(Topic topic);
}
In den Referenzen Versammlung, die ich dort vorhandene Schnittstellen wiederverwendet werden soll ist die gleiche Funktion Unterschrift
public interface IArtifact
{
void Accept(IArtifactVisitor visitor);
}
public interface IArtifactVisitor
{
void Visit(Topic topic);
void Visit(NewTopic topic);
}
und Akzeptieren der sieht so etwas wie dieses
public void Accept(IArtifactVisitor visitor)
{
visitor.Visit(this);
}
Um entfernt die Codewiederverwendung, habe ich das folgende versucht:
public interface MyIArtifact : IArtifact
{
void Accept(MyIArtifactVisitor visitor);
}
public interface MyIArtifactVisitor : IArtifactVisitor
{
void Visit(NewTopic topic);
}
aber, was das tut, ist, es zwingt mich, in jeder Implementierungsklasse zu implementieren beide Accept (MyIArtifactVisitor Besucher) und Accept (IArtifactVisitor Besucher)
ein besserer Weg, dies Gibt es zu tun?
Sie können eine gemeinsame Basisklasse (abstrakt oder nicht) erstellen, die diese Schnittstellen implementiert und von ihr erbt. – Igor
Ich fürchte, ich verstehe nicht, was Sie versuchen zu tun. Welche Codeduplizierung haben Sie derzeit anders als die "doppelten" Interfaces in referenzierten Assemblies (worüber Sie nicht wirklich viel machen können) –
Dies ist ein Beispiel für ein Pattern, das wiederholt wird, zum Beispiel void Visit (Topic topic) ist dupliziert, über Schnittstellen –