gehören Schnittstellen in eigenen Dateien

8

Als Faustregel gebe ich generell Klassen in eine eigene Datei. Visual Studio scheint dies zu fördern, aber was ist in Bezug auf Schnittstellen angemessen?

z.B.

Ich habe Klasse Foo, die Interface Bar implementiert

%Vor%

es scheint natürlich, diese in der gleichen Datei zu gruppieren, bis eine andere Klasse die Schnittstelle implementiert, aber eine Datei für zwei Zeilen zu widmen scheint übermäßig, aber korrekt.

Was ist angemessen?

    
Johnno Nolan 26.06.2009, 11:26
quelle

8 Antworten

26

Ich würde sie in zwei Dateien aufteilen. Ich habe oft festgestellt, dass Klassen nicht mehr zu managen sind, wenn sie nicht in ihren eigenen Dateien sind.

Stellen Sie sich vor, Sie versuchen, die Klasse Foo in einer Datei mit dem Namen IBar.cs oder umgekehrt zu finden.

    
Adrian Godong 26.06.2009, 11:28
quelle
3

Da der Zweck einer Schnittstelle darin besteht, einen "Vertrag" für (potentiell) mehrere implementierende Klassen zu definieren, würde ich sagen, dass es sinnvoller ist, die Schnittstellendefinition in eine eigene Datei zu setzen. Was passiert, wenn du Baz auch dazu bringen willst, Foo zu implementieren?

    
ZombieSheep 26.06.2009 11:30
quelle
2

Abhängig von der Situation teile ich entweder jede Schnittstelle in eine eigene Datei oder alternativ eine Datei Interfaces.cs, in der ich die Schnittstellen in einem bestimmten Namespace zusammenfasse.

Ich würde niemals eine Schnittstelle in dieselbe .cs-Datei einfügen wie eine Klasse, die sie implementiert hat.

    
tomfanning 26.06.2009 11:28
quelle
2

Ich habe nur zwei Situationen, in denen ich mehrere Top-Level-Typen in einer einzigen Datei ablegen kann:

  • Wenn Sie mehrere Delegattypen definieren. Jede wird nur eine einzelne Deklaration sein, daher ist es sinnvoll eine Delegates.cs Datei zu haben.
  • Manchmal ist es sinnvoll zu deklarieren, dass eine ganze Reihe von automatisch generierten partiellen Typen eine Reihe von Schnittstellen implementiert. Auch dies ist eine Zeile pro Typ:

    %Vor%

Ansonsten verwende ich eine Datei pro Top-Level-Typ, die für Schnittstellen, Klassen und Enums gilt.

    
Jon Skeet 26.06.2009 11:31
quelle
2

Sie sollten die Schnittstelle sicher in eine eigene Datei einfügen. Sie können sogar in Erwägung ziehen, die Schnittstelle in eine eigene Klassenbibliothek zu stellen. Wenn die Schnittstelle von zwei verschiedenen Klassen in zwei verschiedenen Bibliotheken verwendet wird, ist es sinnvoll, die Schnittstelle in eine dritte Bibliothek zu stellen, sodass Sie keine spezifische Implementierung hinzufügen müssen, wenn Sie die Schnittstelle zu einem neuen Projekt hinzufügen möchten. In der dritten Bibliothek können Sie auch Klassen platzieren, die mit Klassen arbeiten, die die Schnittstelle implementieren (z. B. public void Cook (IBar x)).

    
quillbreaker 26.06.2009 12:23
quelle
1

Ja, eine Schnittstelle bedeutet, dass Sie mehr als eine Klasse mit denselben Methoden- und Eigenschaftendefinitionen haben. Es ist praktisch, es in einer Datei zu haben, da es einfach zu ändern ist, ohne Dateien zu ändern. Im Laufe der Zeit werden Sie und andere Klassen es benutzen, und wenn Sie eine Änderung daran vornehmen müssen, müssen Sie nach der richtigen Datei suchen und picken.

    
kemiller2002 26.06.2009 11:33
quelle
1

Ich lege sie immer in separate Dateien. Wenn Sie mehr als einen Dateityp pro Datei verwenden, stört dies nur IMO. Ich könnte aber einen Ordner "Interfaces" für sie erstellen. Ich denke auch, dass Sie sie nicht so oft ändern sollten, wie Ihre tatsächlichen Implementierungen, so dass sie zumindest voneinander getrennt werden, um das ein wenig zu fördern.

    
Botz3000 26.06.2009 13:12
quelle
0

Hinsichtlich der Kapselung sollte jedes Objekt, ob eine Klasse oder eine Schnittstelle, in einer eigenen Datei sein. Auch wenn die Schnittstelle nur eine abstrakte Methode enthält, ermöglicht die Tatsache, dass sie sich in einer anderen Datei befindet, eine bessere Organisation und bessere Kapselung. Sie können diese verschiedenen Schnittstellen in einem Ordner speichern, geben Sie ihm einen geeigneten Namespace und damit eine sauberere Lösung.

    
johnofcross 26.06.2009 11:31
quelle

Tags und Links