Можно использовать ‹namespace›; сделать директивы более эффективными в .NET?

Когда я создаю новый файл класса на C #, обычная структура выглядит следующим образом:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace UnitTest
{
    class Class1
    {
    }
}

StyleCop не любит использовать директивы за пределами пространства имен, поэтому в идеале я бы реорганизовал свой код как таковой:

namespace UnitTest
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    class Class1
    {
    }
}

С тех пор, как я был программистом на Java, меня учили, что лучше импортировать только необходимые ссылки, а не весь пакет, например:

import foo.bar.MyObject;

вместо

import foo.bar.*;

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

using StringBuilder = System.Text.StringBuilder;

или при использовании псевдонимов:

using HANDLE = System.IntPtr;
using HDC = System.IntPtr;

Итак, мои вопросы относительно передовой практики и эффективности использования директив:

  1. Более эффективно продолжать использовать операторы внутри пространства имен или это чисто стилистическое предпочтение?
  2. Если более эффективно включать только необходимые элементы, а не все пространство имен?

person Matthew Layton    schedule 07.03.2013    source источник
comment
отредактировано: они используют директивы, а не операторы - большая разница   -  person Marc Gravell    schedule 07.03.2013
comment
stackoverflow.com/ questions / 125319 /   -  person Habib    schedule 07.03.2013
comment
@MarcGravell, спасибо! Извините, это могло немного запутать   -  person Matthew Layton    schedule 07.03.2013
comment
Используйте только то, что вам нужно, чтобы предотвратить конфликты именования, которые случаются редко. Для меня часть использования - это просто шум, поэтому я стараюсь его уменьшить, насколько это возможно.   -  person Tim Schmelter    schedule 07.03.2013


Ответы (2)


  1. Есть некоторые второстепенные случаи, когда это имеет значение, но для в большинстве случаев это просто стилистическое предпочтение.
  2. Операторы using просто сообщают компилятору, где он может найти типы. Это не влияет на время выполнения.
person Daniel Hilgarth    schedule 07.03.2013

  1. Неа; стилистическое предпочтение, если оно не вносит никаких смысловых изменений; случаи, когда он меняет значение, очень редки (хотя раньше была ошибка с генератором кода LINQ-to-SQL, который не заботился о том, куда вы их помещаете - теперь это исправлено)
  2. Неа; неиспользуемые директивы не используются, и они не сильно влияют на компилятор

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

person Marc Gravell    schedule 07.03.2013
comment
Отличается ли механизм .NET от Java? Я спрашиваю, потому что, как уже говорилось, меня учили, что в Java вы должны импортировать только определенные объекты, а не входящий пакет, так как это может повлиять на производительность при загрузке пакета. Либо меня неправильно учили, либо .NET просто другой? - person Matthew Layton; 07.03.2013
comment
@ series0ne Я не знаю, как java с этим справляется - поэтому я не могу сказать, другое ли это; но это не проблема в .NET - person Marc Gravell; 07.03.2013