2009-06-26 12 views
8

Jako ogólną zasadę generalnie umieszczam klasy w pliku własnym. Visual Studio wydaje się zachęcać do tego, ale co jest właściwe w odniesieniu do interfejsów?czy interfejsy należą do plików własnych

np.

mam class Foo, która implementuje interfejs Bar

public interface IBar 
{ 

} 

public class Foo : IBar 
{ 

} 

wydaje się naturalne, aby grupy te w tym samym pliku, aż do następnej klasy implementuje interfejs jednak poświęcić pliku do 2 linie kodu wydaje się zbędne, ale poprawne.

Co jest odpowiednie?

Odpowiedz

26

Chciałbym podzielić je na 2 pliki. Często uważałem, że zajęcia zaczynają być niemożliwe do opanowania, gdy nie znajdują się w ich własnych plikach.

Wyobraź sobie, że próbujesz znaleźć klasę Foo w pliku o nazwie IBar.cs lub na odwrót.

+0

+ To zdecydowanie łatwiejsze w zarządzaniu zarówno ręcznie, jak i poprzez skrypt. –

+1

Jeśli wszystko, co robię, to wyodrębnianie interfejsu dla testowalności, to dobrym miejscem na to jest w klasie. Kiedy jest więcej niż 1 implementacja, staje się bardziej atrakcyjna, aby oddzielić dwa. –

2

W zależności od sytuacji dzielę każdy interfejs na własny plik lub alternatywnie na plik Interfaces.cs, w którym grupuję interfejsy w danej przestrzeni nazw.

Nigdy nie umieściłbym interfejsu w tym samym pliku .cs jako klasie, która go zaimplementowała.

3

Ponieważ celem interfejsu jest zdefiniowanie "kontraktu" dla (potencjalnie) wielu klas implementacji, powiedziałbym, że umieszczenie definicji interfejsu w jego własnym pliku ma więcej sensu. np. Co się stanie, jeśli chcesz również wprowadzić Baz implement Foo?

0

Pod względem enkapsulacji każdy obiekt, niezależnie od klasy lub interfejsu, powinien znajdować się w osobnym pliku. Nawet jeśli interfejs zawiera tylko jedną abstrakcyjną metodę, fakt, że znajduje się w innym pliku, pozwala na lepszą organizację i lepszą enkapsulację. Możesz przechowywać te różne interfejsy w folderze, nadać mu odpowiednią przestrzeń nazw, a tym samym czystsze rozwiązanie.

+2

Powiedziałbym, że enkapsulacja jest właściwością samego kodu, niezależnie od tego, gdzie jest przechowywana w systemie plików. Ogólnie rzecz biorąc, przydatne jest umieszczanie rzeczy w pomocniczo nazwanych plikach, ale to nie jest część enkapsulacji IMO. –

2

mam tylko dwie sytuacje, w których znajduję się wprowadzenie wielu typów najwyższym poziomie w jednym pliku:

  • Jeśli definiowania wielu typów delegata. Każda z nich będzie tylko pojedynczą deklaracją, więc warto mieć plik Delegates.cs.
  • Czasami warto zadeklarować, że cała masa autogenerowanych typów częściowych implementuje wiele interfejsów. Ponownie, jest to jedna linia od rodzaju:

    // Actualy code is in the autogenerated file 
    public partial class Foo : ICommon {} 
    

Poza tym, używam jeden plik dla każdego typu najwyższego poziomu, który jedzie do interfejsów, klas i teksty stałe.

1

Tak, posiadanie interfejsu oznacza, że ​​będziesz mieć więcej niż jedną klasę z tymi samymi metodami i definicjami właściwości. Posiadanie go w jednym pliku na chwilę jest wygodne, ponieważ można je łatwo modyfikować bez zmiany plików. Z biegiem czasu będziesz go używał i inne klasy będą go używać, a jeśli będziesz musiał dokonać zmiany w dół drogi, będziesz musiał polować i żłobić dla właściwego pliku.

2

Powinieneś umieścić interfejs w swoim własnym pliku. Możesz nawet rozważyć umieszczenie interfejsu w jego własnej bibliotece klas.Jeśli interfejs będzie używany przez dwie różne klasy w dwóch różnych bibliotekach, sensownym jest umieszczenie interfejsu w trzeciej bibliotece, więc nie musisz dołączać żadnej konkretnej implementacji, jeśli chcesz dodać interfejs do nowego projektu. W trzeciej bibliotece możesz również umieścić klasy współpracujące z klasami, które implementują interfejs (np. Public void Cook (IBar x)).

1

Zawsze umieszczam je w osobnych plikach. Posiadanie więcej niż jednego typu na plik jest po prostu rozpraszającym IMO. Mogę jednak utworzyć dla nich folder "Interfejsy". Uważam również, że nie należy ich modyfikować tak często, jak rzeczywiste implementacje, tak więc rozdzielenie ich przynajmniej promuje to nieco.

Powiązane problemy