我有多年的C ++和Java经验,但我是C#的新手。
最近,当我读一本关于C#的书时,他们将以下内容称为名称空间,我发现它很奇怪。根据我在C ++中的知识,这些实际上是pre-processor directives
。
using System; //A book called these as namespace
using System.Collections.Generic; //A book called these as namespace
using System.Text; //A book called these as namespace
根据msdn网站,上述内容称为directives
。
如果以上是致电namespace
以下情况如何?
namespace My_First_Program //This is also call namespace
{
class Program
{
static void Main()
}
}
所以我的第一个问题是:命名空间究竟是哪个?我可以将using System;
称为pre-processor directive
吗?
我的第二个问题是:我可以假设namespace My_First_Program
与C ++中的using namespace std
类似吗?
答案 0 :(得分:2)
以下语句定义命名空间:
namespace My_First_Program {
...
}
大括号内的任何代码都在(奇妙命名的)My_First_Program
命名空间内。
using
语句'导入'命名空间,以便您不必使用其完全限定名称。
使用'声明不是预处理器指令。您可以找到它们的列表here。
答案 1 :(得分:2)
不,C#' using
不是preprocessor directive。
在C#中,这几乎与C ++相同
using System;
与
有类似的意图using namespace std;
或在Java中
import java.util.*;
即System
命名空间中的符号现在在范围内,前提是此项目也引用了必需的程序集。如果没有using
,则访问System
的所有代码都需要将完整的命名空间限定为前缀,例如System.DateTime
。您还可以使用using
为命名空间设置别名,例如如果添加多个using
语句的结果将2个或更多具有相同名称的符号带入范围,例如(using m=My.Very.Long.NameSpace
)
类似地:
namespace foo
{
}
也具有与C++
中相同的效果 - 这会将块中定义的所有符号放置在提供的命名空间foo
中。与其他语言一样,这样做是为了防止混乱全局命名空间。这与Java文件中的package
关键字非常相似。从理论上来说,C#
你可以在一个文件中有多个namespace
块,虽然这可能是不寻常的,也可能是不好的做法。
答案 2 :(得分:0)
使用与java中的import相同。 您的书将其称为命名空间,因为使用导入命名空间。
据我所知,使用c ++中的命名空间std与使用system的c#中的相同;
答案 3 :(得分:0)
命名空间到底是哪个?我对么 使用系统调用;作为预处理器指令?
不,using System;
只包含命名空间,因此您可以访问System
的类而不指定 namescape 。这与preprocessor directives无关C#
。
在这种情况下,System
是命名空间,但在使用using指令包含System
命名空间之前,必须添加对System.dll
的引用。 DLL
个文件是可以包含一个或多个名称空间的程序集。
我可以假设命名空间My_First_Program与在C ++中使用命名空间std类似吗?
不,namespace My_First_Program
declaration of a namespace. using namespace std
类似于C#