查询C#名称空间和使用
新手C#关于使用名称空间的问题(&N):查询C#名称空间和使用,c#,namespaces,C#,Namespaces,新手C#关于使用名称空间的问题(&N): using System; using System.Data; namespace Granite2 { class Class1 { System.Data.SqlClient.SqlConnection Conn1; SqlClient.SqlConnection Conn2; } } 毫不奇怪,Conn1行编译得很好。Conn2有一个错误“找不到类型或命名空间'SqlClient' 为什么会这样
using System;
using System.Data;
namespace Granite2 {
class Class1 {
System.Data.SqlClient.SqlConnection Conn1;
SqlClient.SqlConnection Conn2;
}
}
毫不奇怪,Conn1行编译得很好。Conn2有一个错误“找不到类型或命名空间'SqlClient'
为什么会这样?我认为如果有“usingsystem.Data”,就意味着我可以在没有完整限定符的情况下引用SqlClient
我很困惑,因为我正在将VB.NET转换为C#,并且名称空间在VB.NET中工作。显然,这里有一些细微差别我不知道。这是因为C#编译器只导入您指定的名称空间中的类型(针对您的特定情况System.Data
),而不是从它的所有子名称空间(因此在您的情况下System.Data.SqlClient
名称空间类型未导入)
从C#team开始,这样做的主要原因是防止名称空间名称之间的冲突
想象一下,您的命名空间
X
可以有子命名空间Y
和Z
都声明了SomeClass
。因此,如果您将使用X
,然后SomeClassС=new SomeClass()代码>-如果编译器将从X
的所有子命名空间中导入所有类型,则会发生冲突。如果类Class1
位于命名空间System.Data
中,则无需指定完整命名空间,但上面的情况除外。此处的情况并非如此。感谢您的参考-有一条评论说VB.NET具有导入子命名空间的行为,这解释了差异。尽管这条评论很旧,但在VS2013中,VB.NET的情况似乎仍然如此