У меня небольшая путаница в .net System.Collections.Generic System — это пространство имен, collections — это проект внутри этого пространства имен, generics — это класс внутри проекта collections. Итак, список, массив, очередь... все находится внутри дженериков. Как можно поместить класс в другой класс.
Это пространство имен, а не класс.
System — это пространство имен. Так и System.Collections, так и System.Collections.Generic. Это все пространства имен. Откуда вы взяли, что это был проект или что System.Collections.Generic был сорт?
Я понимаю, что английский не является вашим родным языком, поэтому я прерву вас, но я не уверен, что мы действительно понимаем, о чем вы здесь спрашиваете, к сожалению.
System.Collections.Generic не является классом, но в качестве примечания, конечно, вы можете определить класс внутри другого класса: class A { class B { } static void Test() { var x = new A.B(); } }; Они называются "вложенные классы" (спасибо, сенфо!), но ты тут не туда смотришь.
эй, @Amy, точка между системой и коллекцией означает, что коллекция является частью системы. если система является пространством имен, то коллекция может быть проектом внутри него.
@OralResu Это неправильно. Вы делаете здесь много предположений, и я не знаю, откуда вы их берете. System.Collections.Generic — это пространство имен внутри пространства имен внутри пространства имен. Никто этих имен относится к проекту и не может относиться к проекту.
@EdPlunkett Я думаю, вы имеете в виду «вложенные классы».
@OralResu «Проект» не имеет ко всему этому никакого отношения. У меня может быть проект со многими пространствами имен или даже без пространств имен. По умолчанию, когда вы создаете новый проект C#, пространство имен для файлов, созданных в корневой папке, будет соответствовать имени, но вы можете легко изменить это, если хотите.
Я голосую за этот вопрос, потому что, хотя это вопрос, который может задать только начинающий программист на С#, изобилующие чресла нашей планеты производят начинающих программистов на С# с практически невообразимой скоростью. Это добавляет больше предельной ценности, чем еще одна итерация «почему я не могу привязаться к частному полю в WPF» или «почему моя неинициализированная ссылка равна нулю».
@EdPlunkett Вы имеете в виду, что система - это пространство имен, а коллекции - это вложенное пространство имен внутри системы, и ... я прав?
@OralResu Это правильно. Пространства имен могут вкладываться очень глубоко, возможно, произвольно глубоко (я не искал это в стандарте). Имена проектов не существуют в качестве идентификаторов в C#. Когда вы создаете проект в VS, его пространство имен По умолчанию будет таким же, как и имя проекта, но вы можете пойти дальше и изменить одно, а другому все равно — инструмент просто использует одну и ту же строку для оба, для удобства.
@EdPlunkett Я спросил, потому что не знаю. и мне все равно, голосует ли кто-то за или против моего вопроса. Меня интересуют только ответы. спасибо за помощь





System.Collections.Generic — это пространство имен. Не класс.
System.Collections — это пространство имен.
System — это пространство имен.
Ни один из них не имеет никакого отношения к проектам. Все они могут быть в одном проекте, или все они могут быть в разных проектах. Одно пространство имен может даже содержать код из множества разных проектов.
Когда вы создаете новый проект в Visual Studio, например «Assembly1», корневым пространством имен по умолчанию для нового проекта также будет Assembly1. Однако нет необходимости, чтобы они были одинаковыми: вы можете переименовать проект в MyNewAssembly, и имя пространства имен не изменится. Если другой проект ссылается на MyNewAssembly.dll, типы в вашей сборке по-прежнему будут находиться в пространстве имен Assembly1.
Ни один из них не является классом. Однако у вас могу есть класс внутри другого класса. Обычно мы называем их вложенные классы.
Стандарт С# говорит, что пространства имен объявляются с помощью ключевого слова namespace, за которым следует имя пространства имен, тело и, возможно, точка с запятой.
Взято со страницы стандартов:
namespace_declaration
: 'namespace' qualified_identifier namespace_body ';'?
;
qualified_identifier
: identifier ('.' identifier)*
;
namespace_body
: '{' extern_alias_directive* using_directive* namespace_member_declaration* '}'
;
The qualified_identifier of a namespace_declaration may be a single identifier or a sequence of identifiers separated by "." tokens. The latter form permits a program to define a nested namespace without lexically nesting several namespace declarations. For example,
namespace N1.N2
{
class A {}
class B {}
}
Это семантически эквивалентно следующему:
namespace N1
{
namespace N2
{
class A {}
class B {}
}
}
Во всех смыслах и целях вы можете игнорировать почти все это и просто рассматривать System.Collections.Generic как пространство имен, в котором «живет» Список <> класс.
Если вам интересно, посмотрите файл исходный код для Systems.Collections. Вы можете найти реализацию класса List<> в строке #292. Как вы можете видеть в строке № 43, он объявлен в пространстве имен System.Collections.Generic.
Вы пробовали сделать это сами? С# всегда разрешал это