c# namespace作用

转自:https://zhidao.baidu.com/question/117422619.html

https://www.baidu.com/s?wd=c%23%20namespace%E4%BD%9C%E7%94%A8&rsv_spt=1&rsv_iqid=0xa9d6d3cc00006e7c&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=2&rsv_sug1=1&rsv_sug7=001&rsv_n=2

https://www.cnblogs.com/rr163/p/4274754.html

https://www.cnblogs.com/eastday/p/5139496.html

https://www.imooc.com/article/13724

namespace相当于windows操作系统中的文件夹,因为现在的程序大多都是大项目或是代码不是一个人来完成的,难免会有变量声明时出现重名的现象,比如程序员A定义了一个变量x程序员B也定义了一个x,这时为了精确定位是哪个x用namespace加以限制就可以了,比如A的x在一个叫 proA的名字空间里,B的在proB的名字空间里那么对x定位时可以直接用proB::x或proA::x来表示具体的x,是不是和windows里的c:\programe files和d:\programe files很相似呢,就这个原理啦~

命名空间(namespace)的作用就好比分地盘,便于集中管理,c#是完全面向对象的语言,所有对象的类型定义都必须是在某个命名空间下定义,所有的方法都必须包含类型定义中,好比人(方法)必须属于某个市(类型定义),这个市又必须属于某个省(命名空间)。
  
C#中的类是利用命名空间组织起来的。命名空间提供了一种从逻辑上组织类的方式,防止命名冲突。
命名空间声明
用namespace 关键字用于声明一个命名空间。此命名空间范围允许您组织代码并为您提供了创建全局唯一类型的方法。
namespace name
{
类型定义
}
其中:在命名空间中,可以声明类、接口、结构、枚举、委托 命名空间。
如果未显式声明命名空间,则会创建默认命名空间。该默认的命名空间(有时称为全局命名空间)。全局命名空间中的任何标识符都可用于命名的命名空间中。
命名空间声明可以作为顶级声明出现在编译单元中,当命名空间声明作为顶级声明出现在编译单元中时,该命名空间成为全局命名空间的一个成员。
命名空间声明出现在另一个命名空间声明内时,该内部命名空间就成为包含着它的外部命名空间的一个成员。
无论是何种情况,一个命名空间的名称在它所属的命名空间内必须是唯一的。命名空间隐式地为 public,而且在命名空间的声明中不能包含任何访问修饰符。

我现在感到学好C#就是就是要知道,C#的基本语法,C#的新的特点,C#能干什么!

其中我感到不管如何,NAMESPACE都是很关键的,可以说不是只对C#而言,而是整个。NET都是由NAMESPACE组成的,所以我在看了C#的基本语法后,就直奔NAMESPACE来了,在这里写下自己的一些感觉,希望能对后面学习的人有所帮助。


NAMESPACE在新的NET环境下编程可以说是无所不在,总之,给我的感觉就是MS的新一代的语言的核心就是NAMESPACE,我们可以通过已经有的NAMESPACE,做我们想做的和愿意做的,当然如果你感觉现有的还不够你的使用的话,你也可以自己来使用现有的来扩展,创建自己的NAMESPACE!(感觉怎么很象以前的COM、DCOM呢?)


下面我门说说如何建立一个NAMESPACE!

定义一个NAMESPACE首先需要包含关键词:namespace

格式如下:

namespace Your_nsname

{

//namespase主体内容;

}


呵呵,给我的感觉就好象和Class或Struct一样。不过他们除了形式有类似外,确实在很多方面都不相同,具体我们以后会慢慢说到!先往下看。。。


在一个NAMESPACE的主体内,可以引用其他的NAMESPACE!例如:

namespace Your_nsname{

//下面引用System和System.Xml着两个NAMESPACE;

using System;

using System.Xml;


//namespase主体内容;

}

在上面有一个需要注意的就是,如果要引用NAMESPACE的话,那么应该在申明其它类型前引用,如下是错误的:

namespace Your_nsname{

//其它一些内容;


//由于引用System和System.Xml放到了其它语句之后,所以。。。

using System;

using System.Xml;

}


另外对于NAMESPACE还有一个有趣的地方,就是。。。

我们先看一下下面的的两个方式:


方式一、

namespace N1.N2

{ class A {}

class B {}

}


方式二、

namespace N1

{

namespace N2

{

class A {}

class B {}

}

}


在上面的良种方式中,第二种很容易就能看懂,是在NAMESPACE N1中再创建一个NAMESPACE N2,而N2中有两个类(class)A、B!那么第一种呢?其实上面两个方式定义的其实是一模一样的。NAMESPACE是可以嵌套定义的,我们可以使用第二种方式,层次感觉比较清楚,也可以使用第一种方式,所不同的是,第一中方式中,在N1和N2之间必须用分隔符“.”来表明他们两者之间的层次关系!

在使用的时候用如下的方式:

N1.N2.A;

N1.N2.B;

 

一、using 用法

   1.引用命名空间。 如: using System;

   2.自动释放对象使用的资源。 

     如: 

  using (SqlConnection connection = new SqlConnection(connectionString)) 
  {

    connection.open();

  }

   (当链接使用完毕以后,将自动释放sqlserver链接。)

   3.添加别名。

     如:

     using A= System;

     (为System添加一个为A的别名)

二、namespace作用域

     1.using 语句写在 namespace 前面; 应使用完全限定名称,不能简写,作用域在整个文件。

     如 ( AAA.AAA1.AAA11、AAA.AAA2.AAA11 )

     2.using 语句写在 namespace 里面;可使用简便写法,作用域在这个命名空间以内。

     如 ( AAA.AAA1.AAA11、AAA.AAA2.AAA11 )简写成(AAA1.AAA11,AAA2.AAA11)

三、注意事项

    1.有namespace的情况下: 如果同个项目中,有两个不同命名空间下的相同类名称 ( AAA.AAA1.AAA11、AAA.AAA2.AAA11) ,需要使用其中一个时,为他加上一个别名即可。

     using AAA11= AAA.AAA1.AAA11;

     这种情况,别名必须要加到namespace里面,可使用简写名称,写在外面起不了作用。

    2.没有namespace的情况下: 直接添加别名即可使用,必须使用完全限定命。

     using AAA11= AAA.AAA1.AAA11;

 

     一般情况下,为了尽量减少冲突。系统的命名空间应该在namespace前面引用;其它命名空间写到namespace里面。

 

相当于城市里的工厂,举个例子:
城市1里面有个工厂叫富土康里面有个工人叫张全蛋。
城市2里面也有个工厂富土康也有个工人叫张全蛋。
他们虽然名字,工厂一样,但他们的城市不一样。
把这两个人叫在一起,他们也还是两个人,长的样子都不一样。
因此namespace的意思就是提供了一个空间,可以存放工厂,等等...

  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值