程序集、命名空间和类

来源:互联网 发布:python cst时间转换 编辑:程序博客网 时间:2024/06/05 09:03
作者:ahdung
链接:https://www.zhihu.com/question/263468057/answer/269458014
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你还漏了一个:【程序集】。

我先说包含关系吧:

程序集|命名空间【包含】类|结构体|接口|枚举|委托。由于类、结构体这些东西在说明这种问题时并没有区别,所以下文可能只拿类说事。

第一层:程序集、命名空间

这俩是平级的,都是对类/结构体等东西的归纳,只不过前者是物理上的,后者是逻辑上的,或者说名义上的。

一个程序集中的类,可以分属多个命名空间,比如mscorlib.dll中的string类属于System命名空间,Registry类属于Micorosft.Win32命名空间;

一个命名空间下的类,亦可能分布在不同程序集中,比如System命名空间下的string和Uri俩类,就分别在mscorlib.dll和System.dll俩程序集中;

大概可以这样类比:程序集好比一个人定居的国度,命名空间好比这个人的国籍,当我们说常居中国的人,他们中可能有中国人、美国人等多种国籍的人;当我们说中国人时,他们可能分布在世界各国。

注意点:

  • 要使用一个类,前提有两个:一是引入它所在的程序集,二是using它的命名空间,或者在类名前带上命名空间使用
  • 类这些东西不一定要在某个具名的命名空间,这个时候,它是在一个叫global的全局空间下,可以通过global::ClassName访问它
  • 命名空间可以嵌套,如System.Windows.Forms,但这里面不存在包含关系,也就是属于A.B下的类跟A没有一毛钱关系,A和A.B是并列的两个命名空间,没有从属,别以为using了A,就可以直接敲B.ClassName来用

第二层:类、结构体、接口、枚举、委托

这些东西也是平级的,只是功能上的不同。其中类和结构功能相似,某些地方可以替用,具体可以了解专门讲它俩的文章,这里不赘述。大体来讲,类/结构体是对相关数据和行为的归纳,是容纳大量代码的地方,我觉得很难通过讲解让你明白在设计上,哪些东西应该归在一个类,哪些应该另起一个类,这是需要通过大量实践才能意会的东西。倒是有一个经验可供参考,就是想象自己写的东西是给别人调的,哪些该自己做好,哪些不该自己负责,哪些该公开,哪些该隐藏,把权责弄清,规划时就有点数。

至于接口、枚举、委托,这些东西也都跟设计有关,到你觉得需要用到这些东西的时候,自然就会理解。刚接触时是很难通过讲解弄明白的,还是那句,只可意会。当然也可能是我表达能力有限。

注意点:

  • 类/结构体可以包含字段、属性、方法等东西,统称类成员
  • 类/结构体可以嵌套,具体来说就是,类中可以再定义类和结构体,结构体中也可以再定义结构体和类;接口、枚举、委托可以也可以定义在类/结构体中,但反过来,这三者里面不能嵌套任何东西;需要明白嵌套只是个安置问题,A里面定义B,A和B并没有从属关系,更不是父子关系,无非就是只能用A.B这种方式来访问B,当然,B的访问级别受A的影响,B的访问级别只能<=A

就这么地,有误之处欢迎指出,感谢。

原创粉丝点击