Всегда было принято размещать операторы использования в пространствах имен (основанные на правилах StyleCop), но шаблон по умолчанию в Visual Studio имеет их снаружи, так что это стало наиболее распространенным использованием.
Существуетхорошая причина, почему автоматически сгенерированные файлы помещают операторы using в пространство имен: это влияет на порядок разрешения ссылок.Если вы определили класс в пространстве имен MyCoolProject.Web, которое имеет общее имя с классом, используемым в Columbus.Web.Data, то использование этого класса прекратится в MyCoolProject.Web.Class, если использование вне, или в Columbus.Web.Data.Class, если использования внутри.Таким образом, сохраняя операторы using внутри пространства имен, автоматически сгенерированный код более устойчив к изменениям, которые вы можете внести в проект.
Это не скомпилируется (поскольку класс MyCoolProject.Web.Console делаетне определено WriteLine):
using System;
namespace MyCoolProject.Web.Services
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello there");
}
}
}
namespace MyCoolProject.Web
{
public static class Console
{
}
}
В то время как это будет:
namespace MyCoolProject.Web.Services
{
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello there");
}
}
}
namespace MyCoolProject.Web
{
public static class Console
{
}
}