命名空间与程序集

本文主要探讨C#中命名空间与程序集的区别。命名空间用于类型的逻辑分组,程序集是程序的物理分组。使用两种分组方式是因逻辑分组针对开发,物理分组针对安装部署,如团队开发、类型过多、版本权限控制等情况。还提及类型可无命名空间及Object类名相关问题。

1.命名控件与程序集的区别。

      命名空间用于对类型进行逻辑分组。程序集则是程序的物理分组对应于一个dll或exe文件

2.为什么要使用两种方式分组?把逻辑分组作为物理分组不是更简单吗?

     逻辑分组主要针对开发人员,而物理分组主要针对安装和部署。

     除此之外,以下情况也需要使用两种方式分组,否则会很不方便。

     1)团队开发。一个公司分处不同的部门共同开发同一个命名控件的不同类型。那么不同的部门可以把他们开发的东西编译成各自的dll文件。使用时把几个dll一起引用即可。

      2)一个命名控件里包含的类型太多,而有大部分是用不上的。如果把一个命名空间编译成一个dll,则会降低运行效率。

      3)有时需要对一个命名空间内的类型区别对待。如果打算开发一个系列软件,该软件分普通版,专业版,高级版。越高的版本具有越高的权限(当中包含了一些高级的类),这是可以使用把高级的功能放到一个单独的dll来控制。

3.类型可以没有命名空间吗?

可以

4.Object类的名字到底是Object还是System.Object?

    可以说都是也可以说都不是。

    1)对于IL来说,确定一个类型是需要程序集+类型全名称的。比方调用Object的ToString()方法,其实是[MSCorLib.dll]System.Object::ToString()。因此CLR不知道命名空间的事情,它只知道调用MSCorLib.dll中的System.Object类。

    2)  对于C#来说,编译后会自动把命名空间加上点号让类型名变成全名称。但是,类名是不能出现点(.)符号的,以下代码在逻辑上是成立的,但是C#语法不允许。

class System.Object
...{
}

    相当于

namespace Sysmtem
...{
    
class Object
    
...{
    }

}

    但是C#中命名空间是允许出现点符号的。

namespace Sysmtem.IO
...{
    
class Object
    
...{
    }

}

   完全等同于

namespace Sysmtem
...{
    
namespace IO
    
...{
        
class Object
        
...{
        }

    }

}

转载于:https://www.cnblogs.com/hjtdlx/archive/2011/10/30/2229508.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值