С# - Местоположение использования операторов

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

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

using System;

namespace MyNamespace
{
    using System.Text;

    public class MyClass {
        // ...
    }
}

Примером этого, по-видимому, излишне является источник ASP.NET MVC.

Ответ 1

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

Оба метода работают нормально.

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

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

Здесь некоторые ссылки для дальнейшего обзора:

Ответ 2

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

Ответ 3

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

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

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

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

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


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