【问题标题】:Does each component of a namesapce be searched recursively?是否递归搜索命名空间的每个组件?
【发布时间】:2023-03-07 18:03:01
【问题描述】:

我知道这是一个非常基本的问题,但我仍然想确认这个过程是怎样的。 假设我们有一个名为 ServiceLayer 的类库和一个名为 BookSercie 的文件夹,以及一个直接在类库下的类文件 Book.cs 和一个名为 BookDto.cs 的类文件 所以它会是这样的:

ServiceLayer 
├── BookSercie
    ├── BookDto.cs 
Book.cs
// Book.cs
using System;

namespace ServiceLayer {
    public class Book {
       ... 
    }
}

// BookDto.cs
using System;

namespace ServiceLayer.BookServices {
    public class BookDto {
       ... // reference Book in Book.cs
    }
}

上面的代码有效,所以我的问题是,因为BookDtoServiceLayer.BookServices命名空间,而BookServiceLayer命名空间,所以它们不是同一个命名空间,但我们不需要添加BookDto.cs中的using ServiceLayer;,那么是不是意味着编译器会取ServiceLayer.BookServices,并自动将它的前一部分(本例中为ServiceLayer)添加为命名空间,例如:

namespace A.B.C.D {
   public class SomeClass { ... }
}

编译器会分析并自动添加:

using A;
using A.B;
using A.B.C;

namespace A.B.C.D {
   public class SomeClass { ... }
}

我的理解正确吗?

【问题讨论】:

标签: c# .net


【解决方案1】:

“命名空间声明可以作为编译单元中的顶级声明出现,也可以作为另一个命名空间声明中的成员声明出现。当命名空间声明作为编译单元中的顶级声明出现时,命名空间成为全局命名空间的成员。当一个命名空间声明出现在另一个命名空间声明中时,内部命名空间成为外部命名空间的成员。无论哪种情况,命名空间的名称在包含的命名空间中都必须是唯一的。”

“namespace_declaration 的qualified_identifier 可以是单个标识符或由“.”标记分隔的标识符序列。后一种形式允许程序定义嵌套的命名空间,而无需在词法上嵌套多个命名空间声明。”

来自https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/namespaces

【讨论】:

    猜你喜欢
    • 2011-01-07
    • 2015-09-06
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多