命名空间

命名空间的设计目的是为了提供一种让一组名称与其他名称分隔开的方式。在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突。

关键字:namespace

namespace namespace_name

{   // 代码声明

}

请看下面的例子:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace ConsoleApplication12

{

class Program

{

static void Main(string[] args)

{

First.T1 t1 = new First.T1();

Second.T2 t2 = new Second.T2();

t1.func();

t2.func();

Console.ReadKey();

}

}

}

namespace First

{

class T1

{

public void func()

{

Console.WriteLine("t1");

}

}

}

namespace Second

{

class T2

{

public void func()

{

Console.WriteLine("t2");

}

}

}

在使用类T1的时候前面加上了First命名空间,其实在使用Console的时候,完整是写法应该是System.Console.ReadKey();

因为使用了using System;所以可以省略这个命名空间.

using关键字

using 关键字表明程序使用的是给定命名空间中的名称。用法前面已经给出,省略前面的命名空间的写法.

也可以使用 using 命名空间指令,这样在使用的时候就不用在前面加上命名空间名称。该指令告诉编译器随后的代码使用了指定命名空间中的名称。

using System;

using First;

using Second;

namespace ConsoleApplication12

{

class Program

{

static void Main(string[] args)

{

T1 t1 = new First.T1();

T2 t2 = new Second.T2();

t1.func();

t2.func();

System.Console.ReadKey();

}

}

}

namespace First

{

class T1

{

public void func()

{

Console.WriteLine("t1");

}

}

}

namespace Second

{

class T2

{

public void func()

{

Console.WriteLine("t2");

}

}

}

嵌套命名空间

命名空间可以被嵌套,即在一个命名空间里嵌套另外一个命名空间.

namespace First

{

//代码

namespace Second

{

//代码

}

}

使用(.)运算符访问嵌套的命名空间的成员.例如:

using System;

using First;

using First.Second;

namespace ConsoleApplication12

{

class Program

{

static void Main(string[] args)

{

T1 t1 = new T1();

T2 t2 = new T2();

t1.func();

t2.func();

System.Console.ReadKey();

}

}

}

namespace First

{

class T1

{

public void func()

{

Console.WriteLine("t1");

}

}

namespace Second

{

class T2

{

public void func()

{

Console.WriteLine("t2");

}

}

}

}

因为using语句在C#文件的开头,而C和C++也罢#include语句放在语句的开头,所以从C++迁移到C#的程序员唱吧命名空间与C++风格的头文件相混淆.using语句在这些文件之间并没有建立物理连接,C#也没有对应于C++头文件的部分.

名称空间的别名

using为命名空间创建别名的用法规则为:

using alias=namespace|type

其中namespace表示创建命名空间的别名;而type表示创建类型别名。例如在.NET Office应用中,常常会引入Microsoft.Office.Interop.Word.dll程序集,在引入命名空间时为了避免繁琐的类型输入,我们通常为其创建别名如下:

using MSWord=Microsoft.Office.Interop.Word;

这样,就可以在程序中以MSWord来代替Microsoft.Office.Interop.Word前缀,如果要创建Application对象,则可以是这样,

private static MSWord.Application ooo=new MSWord.Application();

同样,也可以创建类型的别名,用法为:

using MyControle=System.Console;class UsingEx{   public static void Main()   {    MyConsole.WriteLine("应用了类的别名");    }}

而创建别名的另一个重要的原因在于同一cs文件中引入的不同命名空间中包括了相同名称的类型,为了避免出现名称冲突可以通过设定别名来解决,例如:

Namespace InsideDotNet.Keyword.Using{   using BoyPlayer=Boyspace.Player;   using Girlplayer=Girlspace.Player;       class UsingEx    {          public static void Main()          {               BoyPlayer.Play();               Girlplayer.Play();           }     }}namespace Boyspace{       public class Player       {             public static void Play()             {                    System.Console.WriteLine("Boys play football.");              }        }}namespace Girlspace{       public class Player       {            public static void Play()            {                  System.Console.WriteLine("Girls play violin.");             }        }}

 

C#编程(七)----------命名空间的更多相关文章

  1. js高级编程中命名空间的两种用法

    第一种:// 声明一个全局对象Namespace,用来注册命名空间Namespace = new Object();// 全局对象仅仅存在register函数,参数为名称空间全路径,如"Gr ...

  2. Linux 网络编程七(非阻塞socket:epoll--select)

    阻塞socket --阻塞调用是指调用结果返回之前,当前线程会被挂起.函数只有在得到结果之后才会返回. --对于文件操作 read,fread函数调用会将线程阻塞(平常使用read感觉不出来阻塞, 因 ...

  3. TCP编程(七)

    此为网络编程的一个系列,后续会把内容补上...

  4. js面向对象编程:命名空间

    在其它语言中为了避免类和方法重名问题,都有一个类似命名空间的概念,在js中实现类似的功能吗? 能够实现,主要是借助于js中对象的概念来实现,比如:  1 在命名空间中定义方法属性 var GiantC ...

  5. C++面向对象高级编程(七)point-like classes和function-like classes

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 1.pointer-like class 类设计成指针那样,可以当做指针来用,指针有两个常用操作符(*和->),所以我们必须重载这两个操作 ...

  6. linux高性能服务器编程 (七) --Linux服务器程序规范

    第七章 LInux 服务器程序规范 1)linux服务器程序一般以后台进程形式运行.后台进程又称为守护进程,是没有控制终端的,所以不会受到外界的干扰.守护进程的父进程通常是init进程(PID为1的进 ...

  7. linux网络编程之socket编程(七)

    今天继续学习socket编程,北京在持续几天的雾霾天之后久违的太阳终于出来了,心情也特别特别的好,于是乎,在这美好的夜晚,该干点啥事吧,那当然就是继续坚持我的程序学习喽,闲话不多说,进入正题: 通过这 ...

  8. 面向对象编程(七)——Static关键字

    Static变量

  9. shell编程(七)之字符串处理

    字符串切片 ${var:offset:number} 取字符串的最右侧几个字符: ${var: -length} 注意: 冒号后必须有一个空白字符 #!/bin/bash var="chen ...

  10. C# 泛型详解---进阶编程(七)

    今天我们来学习在C#的泛型技巧,传统的课本都在讲解什么是泛型,然后列举一大堆代码示例告诉你什么是泛型,今天我们就来聊聊更加本质的东西,我为什么要用泛型?它是来解决什么问题的?底层原理是什么? 简单来说 ...

随机推荐

  1. 基于docker 搭建Prometheus+Grafana

    一.介绍Prometheus Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的.随着发展,越来越多公司和组织接受采 ...

  2. HTML小工具

    一般可能用的到的符号代码: 符号 HTML 符号 HTML     & & < < > > ⁄ ⁄ " " ¸ ¸ ° ° ½ ½ ¼ ¼ ...

  3. 【LOJ】#2027. 「SHOI2016」黑暗前的幻想乡

    题解 我一开始写的最小表示法写的插头dp,愉快地TLE成60分 然后我觉得我就去看正解了! 发现是容斥 + 矩阵树定理 矩阵树定理对于有重边的图只要邻接矩阵的边数设置a[u][v]表示u,v之间有几条 ...

  4. pct_free

    SQL> select table_name,pct_free,pct_used from user_tables; TABLE_NAME PCT_FREE PCT_USED---------- ...

  5. thinkphp3.2开启静态缓存与缓存规则设置

    网站的静态缓存对大访问量有很好的缓解作用,尤其对网站的大并发,可有效的缓解数据库的压力.在thinkphp中实现静态缓存很简单,thinkphp都已经封装好了直接调用即可. 静态缓存   首先设置 H ...

  6. 基于Laravel开发博客应用系列 —— 使用Bower+Gulp集成前端资源

    本节我们将讨论如何将前端资源集成到项目中,包括前端资源的发布和引入.本项目将使用 Bower 和 Gulp 下载和集成jQuery.Bootstrap.Font Awesome 以及 DataTabl ...

  7. Sqlite可视化工具sqliteman安装(转)

        Sqlite可视化工具sqliteman安装 1.安装前准备 系统要求:RedHat 6.9 Qt库版本:4.2及以上 2.安装文件 采用源码方式安装 可用下面地址自行下载 https://s ...

  8. <泛> STL - vector 模拟实现

    今天为大家带来一个模拟STL-vector的模板实现代码. 首先看一下测试结果,之后再为大家呈现设计 测试效果 测试代码 #include<iostream> #include<ve ...

  9. MSTP多生成树的配置

    STP的不足 STP协议虽然能够解决环路问题,但是由于网络拓扑收敛较慢,影响了用户通信质量 而且如果网络中的拓扑结构频繁变化,网络也会随之频繁失去连通性,从而导致用户通信频繁中断 RSTP对STP的改 ...

  10. CentOS6启动流程(含详细流程图)

    参考:Linux启动流程和grub详解(作者:好笔记运维) 为什么把这位的参考放在前面,主要是这位大佬的流程图太详细了.虽说不一定要了解这么详细,但还是很佩服啊.不多说,上图(在新标签中打开图片) 下 ...