在c#中,如果我想添加其他系统命名空间,为什么我需要调用每个命名空间?如果我想添加其他系统名称空间,为什么我需要调用每个名称空间?
例如,如果我想打电话给System.Text命名空间我必须使用 :
using System;
using System.Text;
- 为什么不能我只是用用系统?
- 为什么我还必须使用System.Text调用?
- 为什么不能通过使用System来使用所有的System namespaces?
- 为什么我们使用系统所有的命名空间?和什么含义系统的?
在c#中,如果我想添加其他系统命名空间,为什么我需要调用每个命名空间?如果我想添加其他系统名称空间,为什么我需要调用每个名称空间?
例如,如果我想打电话给System.Text命名空间我必须使用 :
using System;
using System.Text;
因为它们是不同的名称空间。
实际上,你只需要
using System.Text;
如果只想使用System.Text
命名空间。
在System
命名空间内有各种类型,例如System.DateTime
。 System.Text
虽然不在System
中,但它是一个单独的名称空间。
这种混淆是由于在名称空间的每个“级别”都有类型造成的。这意味着例如System.DateTime
和System.Text
都出现在System
中,实际上前者是System
中的一种,而后者是完全不同的名称空间。
你能详细说明为什么命名约定不好吗?也许这只是因为我已经使用.NET多年了,但它对我来说很有意义,而且我们在自己的应用程序中使用了相同的命名传递。 –
@LarsKristensen,我试图做到这一点。希望我在这个过程中没有让我的答案过于复杂! –
那么,理解你想表达的东西有点棘手 - 编辑实际上使得它听起来像你认为使用命名对话是一个好方法? :) –
System命名空间仅引用在System下直接找到的文件。它不会自动包含所有System。*名称空间。这是有意的,因为这些都是专业的命名空间,在每个班级都不需要。例如,并非每个项目都自动需要System.Web命名空间。
This article解释了如何使用命名空间。尤其是关于完全限定名称的例子可能会对你很有意思。
下面是一个视觉示例,可以帮助你一点。
基本上,您无法从命名空间.System访问命名空间.Text,因为.Text命名空间中包含的方法不存在于.System命名空间中。
namespace OuterNamespace
{
public class DoStuff
{
public DoStuff()
{
//This DoStuff is different...
}
}
namespace InnerNamespace
{
public class DoStuff
{
public DoStuff()
{
//than this DoStuff.
}
}
}
}
public class Test
{
public Test()
{
//This "DoStuff" class
OuterNamespace.DoStuff outerStuff = new OuterNamespace.DoStuff();
//Is different than this "DoStuff" class
OuterNamespace.InnerNamespace.DoStuff innerStuff = new OuterNamespace.InnerNamespace.DoStuff();
}
}
系统和System.Text是两个不同的命名空间,这就是为什么你必须既指。
的System
命名空间包含基本类和基础类定义常用值和引用数据类型,事件和事件处理程序,接口,属性和处理异常
的System.Text
命名空间中包含有类型为字符编码和串操纵。子名称空间使您能够使用正则表达式处理文本。
现在,如果您对命名风格感到困惑,那么我会坚持使用微软的命名约定,因为它明确隔离了相关类型并且易于迭代。这使得在一个System
命名空间内列出所有CLR类型的迭代类型迭代成为可能。
不是一个答案,因为系统是一个集合,充满了例如“文本”,为什么不是在库中的编译器库系统? – Max
正在不同的程序集中回答吗? –
@MaxMommersteeg不,'System'不是一个集合,例如'.Text'。请参阅我的回答澄清。 –