По каким причинам я должен держать раздел «использование» чистым в C #?


11

Однажды, когда я выполнял рефакторинг своего кода, я перешел в среду IDE в раздел using своего класса C #, очистил неиспользуемые пространства имен и дублирующие пространства имен и отсортировал их все.

Моя пара (парное программирование) спросила меня о причине. Я понятия не имел, почему я это сделал. Я сделал это по своей привычке, чтобы сохранить весь мой код в чистоте и порядке. Я имею в виду, что я сказал ему, что иметь более чистый код - это хорошая идея в целом, но, конечно, эта причина не является хорошим оправданием, так как я даже не буду тратить свое время на использование раздела любой кодовой страницы C #.

Поскольку много раз вы перемещаете класс или перечисление (или тип в целом) из одного пространства имен в другое пространство имен, и это добавляет новые операторы использования в ваш код (либо вручную, поднявшись вверх по окну кода и написав оператор использования самостоятельно, либо через редактор с использованием комбинации Alt+ Ctrl+ F10), и поскольку эти новые операторы использования будут добавлены в конец раздела использования , что делает их не отсортированными по алфавиту, и поскольку компилятор никогда не жалуется ни на одну из этих проблем, почему мы должны сделать это раздел чистый и аккуратный? Какие причины у нас могут быть?


5
Об этом уже спрашивали и отвечали о переполнении стека - stackoverflow.com/questions/4163320/unused-using-statements (и два связанных вопроса на боковой панели) - в основном нет причин беспокоиться о неиспользованных использованиях
ChrisF

Отличная ссылка @ChrisF, я думаю, что получил свой ответ там. Может быть, вы должны присоединиться к вопросу с этим, или сделать что-то подобное. :)
Саид Неати

Проверьте это также: stackoverflow.com/a/136646/333306

Ответы:


22

Там нет разницы в производительности, независимо от того, сколько usingдиректив у вас есть.

Но я думаю, что имеет смысл содержать их в чистоте по двум причинам:

  1. Если вы посмотрите на usings, вы увидите, какие зависимости у файла. Это может помочь вам выяснить, что делают типы в файле. Если вы сделаете это, расположение usingсимволов в определенном порядке поможет вам увидеть это быстрее.
  2. Если у вас слишком много usings, это может указывать на то, что у вас плохое разделение проблем и что типы в файле делают слишком много.

И то, и другое не очень важно, поэтому вам не стоит об этом слишком беспокоиться. Но лично я думаю, что это стоит держать в usingчистоте.


8

Моими основными причинами для очистки среди использования операторов являются:

  • Чем чаще используются операторы, тем больше вероятность конфликта имен, что будет означать, что вам придется включать части пространства имен в код, чтобы избежать неоднозначности.
  • IntelliSense фильтруется на основе всех сборок в ваших операторах использования. Поэтому, если вы очистите его от ненужных утверждений, вы поможете себе, помогая с точностью IntelliSense.

Кроме того, я согласен с другими ответами в том, что это повышает удобочитаемость и помогает понять, что делают типы в классе.


Я не понимаю, почему за это не проголосовали выше. Конфликты пространства имен являются законной проблемой.
RubberDuck

7

«Совершенство достигается не тогда, когда нечего добавить, а когда нечего убрать», - Антуан де Сент-Экзюпери

Всякий раз, когда вы можете удалить что-то, что не является необходимым и не добавляет понимания, делайте это (читаемость стоит дополнительного кода).


Отличный афоризм. Мне понравилась идея. +1;)
Саид Нимати

4

Это просто удаление шума из сигнала. Меньше шума означает, что легче получить сигнал, то есть понять смысл кода.

Как генератор шума это довольно незначительный, хотя.


2
  • Это улучшает читабельность вашего кода.
  • Обычно не имеет смысла следовать этому руководству, если у вас есть только несколько операторов

  • Имеет смысл разделить использование операторов на разделы.

Например:

    using System.Web;

    using MyPlatform.FooX;        
    using MyPlatform.FooY;

    using MyFramework.Helpers;        
    using MyFramework.Extentions;

Если я посмотрю на класс, то сразу пойму, что данный класс использует сборку System.Web, а также нашу платформу и фреймворк. Это дает мне приблизительное представление о его зависимостях и сложности.

Затем вы можете сделать еще один шаг и упорядочить операторы, но я думаю, что это делает использование операторов менее читабельным, поэтому я бы не рекомендовал этого.

using MyFramework.Extentions;
using MyFramework.Helpers;

using System.Web;

using MyPlatform.FooX;        
using MyPlatform.FooY;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.