C # - Расположение использования операторов - PullRequest
10 голосов
/ 27 августа 2009

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

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

using System;

namespace MyNamespace
{
    using System.Text;

    public class MyClass {
        // ...
    }
}

Примером того, что это делается в проекте, казалось бы, излишне, является ASP.NET MVC source .

Ответы [ 3 ]

13 голосов
/ 27 августа 2009

Помещение «использование» в верхней части файлов является способом по умолчанию для Visual Studio. Тем не менее, рекомендуемый подход - помещать операторы using в пространство имен. Даже стильоскоп MS ловит это и говорит, что стандартный путь VS неверен.

Обе техники работают нормально.

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

Важно отметить, что когда код был написан с использованием директив размещены за пределами пространства имен, уход должны быть приняты при перемещении этих директивы в пространстве имен, чтобы убедитесь, что это не меняет семантика кода. Как объяснил выше, размещение директив using-alias в элементе пространства имен позволяет компилятор на выбор конфликтующие типы таким образом, что будет не бывает, когда директивы помещается вне пространства имен.

Вот несколько ссылок для дальнейшего рассмотрения:

3 голосов
/ 27 августа 2009

Я никогда даже не видел / не слышал об этой практике, пока не начал использовать StyleCop и был отмечен правилом SA1200 , которое я теперь просто отключаю. Странно, что файлы .cs, которые Visual Studio создает в рамках нового проекта, нарушают это правило, размещая директивы using в самом начале файла, вне пространства имен.

0 голосов
/ 27 августа 2009

отредактировано, моя голова висит от стыда

Ааа! Оператор using, на который вы ссылаетесь, используется для импорта пространства имен, а не для переноса объекта IDisposable!

Очень разные, неоднозначные термины ... вы меня запутали: -)

Лично мне они нравятся вне пространства имен в верхней части файла; но это, вероятно, из-за того, что я переключаюсь между C # и VB.NET.

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


Стандарт кодирования iDesign C # является надежным стандартом для подражания (или для получения вашего собственного). Рекомендуется хранить операторы using вне пространства имен как элемент № 14. Но все зависит от соглашения вашей компании / проекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...