System.Collections.Generic是一个类?

时间:2019-04-30 19:12:30

标签: c# .net data-structures

.net有点混乱 System.Collections.Generic 系统是一个名称空间,集合是该名称空间中的一个项目,泛型是集合项目中的一个类。 所以列表,数组,队列...都在泛型内部。如何将一个类放在另一个类中。

2 个答案:

答案 0 :(得分:3)

System.Collections.Generic是一个名称空间。不是课程。

System.Collections是一个命名空间。

System是一个命名空间。

这些都与项目无关。它们可能都在同一个项目中,也可能都在单独的项目中。一个名称空间甚至可以包含来自许多不同项目的代码。

在Visual Studio中创建新项目时,说“ Assembly1”,新项目的默认根名称空间也将是Assembly1。但是,不需要两者相同:您可以将项目重命名为MyNewAssembly,名称空间名称不会更改。如果另一个项目链接到MyNewAssembly.dll,则程序集中的类型仍将在Assembly1命名空间中找到。

这些都不是类。但是,您可以在另一个类中有一个类。我们通常将其称为nested classees

答案 1 :(得分:1)

C# standard表示名称空间是用namespace关键字声明的,其后是名称空间的名称,主体,以及可选的后跟分号。

来自标准页面:

namespace_declaration
    : 'namespace' qualified_identifier namespace_body ';'?
    ;

qualified_identifier
    : identifier ('.' identifier)*
    ;

namespace_body
    : '{' extern_alias_directive* using_directive* namespace_member_declaration* '}'
    ;
  

namespace_declaration的qualified_identifier可以是单个   标识符或以“。”分隔的标识符序列。令牌。的   后一种形式允许程序定义嵌套名称空间而无需   在词汇上嵌套几个命名空间声明。例如,

namespace N1.N2
{
    class A {}

    class B {}
}

这在语义上等同于以下内容:

namespace N1
{
    namespace N2
    {
        class A {}

        class B {}
    }
}

出于所有意图和目的,您几乎可以忽略所有这些,而只是将System.Collections.Generic视为List<> class“生存”的名称空间。

如果您好奇,请查看source code for Systems.Collections。您可以在第292行找到List <>类的实现。如您在第43行所见,它是在System.Collections.Generic名称空间中声明的。