关于C#名称空间的快速检查
好的,有关于C#名称空间的快速检查,c#,namespaces,C#,Namespaces,好的,有System和System.Web。我的观点正确吗?这表明的结构是: namespace System { // all of the outer namespace members namespace Web { // all of the inner members } } 当一个名称空间嵌套在另一个名称空间中时,仅对父/外部名称空间使用指令不会自动引入子/嵌套名称空间?换言之: using System; public clas
System
和System.Web
。我的观点正确吗?这表明的结构是:
namespace System
{
// all of the outer namespace members
namespace Web
{
// all of the inner members
}
}
当一个名称空间嵌套在另一个名称空间中时,仅对父/外部名称空间使用指令不会自动引入子/嵌套名称空间?换言之:
using System;
public class Example
{
public Example()
{
context1 = new HttpContext(); // won't work
context2 = new System.Web.HttpContext(); // will work
}
}
只是想看看我是否真的理解正确。System.Web声明为:
namespace System.Web
{
public class HttpContext {}
}
但是,可以实际声明子命名空间:
namespace System
{
namespace Web
{
public class HttpContext {}
}
}
我从未见过这样的东西,但语法允许,效果是一样的。在这两种情况下,HttpContext
的名称空间都是System.Web.HttpContext
即使在第二个例子中,使用系统
不会导入子命名空间,只导入该命名空间中定义的类型。是的,using指令只允许在不使用命名空间限定符的情况下使用该命名空间中声明的类型。嵌套的名称空间不会自动包含。正如Daniel所说,System.Web
不是单独声明的System
和System.Web
是两个独立的名称空间,在技术上是不相关的
这就是为什么new HttpContext()
的代码示例不起作用的原因-因为HttpContext
根本不在系统
命名空间中。这是关于复合命名空间的常见混淆。下面是microsoft的一篇关于它的优秀文章:您可以嵌套名称空间,任何使用
指令的都只会授予您所引用的特定名称空间中定义的成员的访问权限
从你的例子来看:
namespace System
{
// all of the outer namespace members
namespace Web
{
// all of the inner members
}
}
引用System
将授予您访问外部命名空间成员的权限,引用System.Web
将授予您访问所有内部命名空间成员的权限
但这是不典型的,通常名称空间在文件中只定义一次。点符号通常遵循文件夹或项目结构,因此嵌套的文件如下:
WebApplication
- Models
- MyModel.cs
- Controllers
- MyController.cs
网络应用
-模型
-MyModel.cs
-控制器
-MyController.cs
可能使用WebApplication.Models
和WebApplication.Controllers
的命名空间
我想不出一个很好的例子,你会想嵌套名称空间,但这可能是一个很好的理由。然而,在我看来,它将被视为规则的一个例外。啊,所以它是一个独立的名称空间?我不认为这真的有什么区别。@KevinM1:在这种情况下,是的。但这真的没有什么区别,请看我的扩展答案。选择作为点符号澄清的答案。我不认为名称空间与“引用”或“访问”有任何关系,但那只是我自己。