Z jakich powodów powinienem utrzymywać czystość sekcji „używanie” w C #?


11

Pewnego razu, gdy refaktoryzowałem kod, przeszedłem do IDE do sekcji używającej mojej klasy C #, wyczyściłem nieużywane przestrzenie nazw i zduplikowane przestrzenie nazw i posortowałem je wszystkie.

Moja para (programowanie par) zapytała mnie o powód. Nie miałem pojęcia, dlaczego to zrobiłem. Zrobiłem to z przyzwyczajenia, aby cały mój kod był czysty i uporządkowany. To znaczy, powiedziałem mu, że posiadanie kodu Cleaner to dobry pomysł w ogóle, ale oczywiście, że powodem nie było dobre uzasadnienie, bo nawet nie przeszkadza, aby spędzać czas w wykorzystaniem części dowolnej strony kodu C #.

Ponieważ wiele razy przenosisz klasę lub wyliczenie (lub typ ogólnie) z jednej przestrzeni nazw do innej, a to dodaje nowe instrukcje przy użyciu do kodu (albo ręcznie, wchodząc w okno kodu i samodzielnie pisząc instrukcję użycia, lub za pomocą edytora używającego kombinacji Alt+ Ctrl+ F10), a ponieważ te nowe instrukcje użycia zostaną dodane na końcu sekcji użycia , co sprawia, że ​​nie są sortowane alfabetycznie, a ponieważ kompilator nigdy nie narzeka na żaden z tych problemów, dlaczego powinniśmy to robić sekcja czysta i schludna? Jakie mamy powody?


5
To pytanie zostało już zadane i udzielono odpowiedzi na Stack Overflow - stackoverflow.com/questions/4163320/unused-using-statements (i dwa powiązane pytania na pasku bocznym) - zasadniczo nie ma powodu, aby martwić się o nieużywane zastosowania
ChrisF

Świetne referencje @ChrisF, myślę, że dostałem tam swoją odpowiedź. Może powinieneś przyłączyć się do tego pytania lub zrobić coś podobnego. :)
Saeed Neamati,

Sprawdź to również: stackoverflow.com/a/136646/333306

Odpowiedzi:


22

Nie ma różnicy w wydajności, bez względu na to, ile usingmasz dyrektyw.

Ale myślę, że sensowne jest utrzymanie ich w czystości z dwóch powodów:

  1. Jeśli spojrzysz na usings, możesz zobaczyć, jakie zależności ma plik. Pomoże ci to dowiedzieć się, jakie są typy plików. Jeśli to zrobisz, posiadanie usings w określonej kolejności pomoże ci to zobaczyć szybciej.
  2. Jeśli masz za dużo usings, może to oznaczać, że masz słabą separację problemów i że typy w pliku powodują zbyt wiele.

Oba nie są bardzo ważne, więc nie powinieneś się tym zbytnio przejmować. Ale osobiście uważam, że warto zachować usingczystość.


8

Moje główne powody, dla których warto posprzątać wśród instrukcji użycia, to:

  • Im więcej instrukcji używania, tym większa możliwość konfliktów nazw, co oznaczałoby, że musisz uwzględnić części przestrzeni nazw w kodzie, aby uniknąć niejednoznaczności.
  • IntelliSense jest filtrowany na podstawie wszystkich zestawów w instrukcjach użytkowania. Dlatego jeśli usuniesz to z niepotrzebnych stwierdzeń, pomożesz sobie, pomagając w dokładności IntelliSense.

Ponadto zgadzam się z innymi odpowiedziami, ponieważ zwiększa to czytelność i ułatwia uzyskanie wyobrażenia o tym, co robią typy w klasie.


Nie rozumiem, dlaczego nie jest to wyżej głosowane. Konflikty przestrzeni nazw są uzasadnionym problemem.
RubberDuck

7

„Doskonałość osiąga się nie wtedy, gdy nie ma już nic do dodania, ale gdy nie ma już nic do zabrania” - Antoine de Saint-Exupery

Ilekroć możesz usunąć coś, co nie jest konieczne i nie dodaje zrozumienia, zrób to (czytelność jest warta dodatkowego kodu).


Świetny aforyzm. Podobał mi się ten pomysł. +1;)
Saeed Neamati,

4

To po prostu usuwa szum z sygnału. Mniej szumów oznacza, że ​​łatwiej jest odbierać sygnał, tzn. Zrozumieć intencję kodu.

Generator hałasu jest jednak dość niewielki.


2
  • Poprawia czytelność twojego kodu.
  • Zwykle nie ma sensu stosowanie się do tych wytycznych, jeśli masz tylko kilka instrukcji użycia

  • Bardziej sensowne jest rozdzielenie za pomocą instrukcji na sekcje.

Na przykład:

    using System.Web;

    using MyPlatform.FooX;        
    using MyPlatform.FooY;

    using MyFramework.Helpers;        
    using MyFramework.Extentions;

Jeśli spojrzę na klasę, to od razu widzę, że dana klasa używa asemblera System.Web, a także naszej platformy i frameworka. Daje mi to ogólne pojęcie o jego zależnościach i złożoności.

Następnie możesz pójść o krok dalej i uporządkować instrukcje, ale myślę, że dzięki temu korzystanie z instrukcji jest mniej czytelne, więc nie poleciłbym tego.

using MyFramework.Extentions;
using MyFramework.Helpers;

using System.Web;

using MyPlatform.FooX;        
using MyPlatform.FooY;
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.