C#编程(七)----------命名空间
命名空间
命名空间的设计目的是为了提供一种让一组名称与其他名称分隔开的方式。在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突。
关键字: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#编程(七)----------命名空间的更多相关文章
- js高级编程中命名空间的两种用法
第一种:// 声明一个全局对象Namespace,用来注册命名空间Namespace = new Object();// 全局对象仅仅存在register函数,参数为名称空间全路径,如"Gr ...
- Linux 网络编程七(非阻塞socket:epoll--select)
阻塞socket --阻塞调用是指调用结果返回之前,当前线程会被挂起.函数只有在得到结果之后才会返回. --对于文件操作 read,fread函数调用会将线程阻塞(平常使用read感觉不出来阻塞, 因 ...
- TCP编程(七)
此为网络编程的一个系列,后续会把内容补上...
- js面向对象编程:命名空间
在其它语言中为了避免类和方法重名问题,都有一个类似命名空间的概念,在js中实现类似的功能吗? 能够实现,主要是借助于js中对象的概念来实现,比如: 1 在命名空间中定义方法属性 var GiantC ...
- C++面向对象高级编程(七)point-like classes和function-like classes
技术在于交流.沟通,转载请注明出处并保持作品的完整性. 1.pointer-like class 类设计成指针那样,可以当做指针来用,指针有两个常用操作符(*和->),所以我们必须重载这两个操作 ...
- linux高性能服务器编程 (七) --Linux服务器程序规范
第七章 LInux 服务器程序规范 1)linux服务器程序一般以后台进程形式运行.后台进程又称为守护进程,是没有控制终端的,所以不会受到外界的干扰.守护进程的父进程通常是init进程(PID为1的进 ...
- linux网络编程之socket编程(七)
今天继续学习socket编程,北京在持续几天的雾霾天之后久违的太阳终于出来了,心情也特别特别的好,于是乎,在这美好的夜晚,该干点啥事吧,那当然就是继续坚持我的程序学习喽,闲话不多说,进入正题: 通过这 ...
- 面向对象编程(七)——Static关键字
Static变量
- shell编程(七)之字符串处理
字符串切片 ${var:offset:number} 取字符串的最右侧几个字符: ${var: -length} 注意: 冒号后必须有一个空白字符 #!/bin/bash var="chen ...
- C# 泛型详解---进阶编程(七)
今天我们来学习在C#的泛型技巧,传统的课本都在讲解什么是泛型,然后列举一大堆代码示例告诉你什么是泛型,今天我们就来聊聊更加本质的东西,我为什么要用泛型?它是来解决什么问题的?底层原理是什么? 简单来说 ...
随机推荐
- CVE-2013-3346Adobe Reader和Acrobat 内存损坏漏洞分析
[CNNVD]Adobe Reader和Acrobat 内存损坏漏洞(CNNVD-201308-479) Adobe Reader和Acrobat都是美国奥多比(Adobe)公司的产品.Adobe R ...
- LR检查点
LR检查点 之前使用LoadRunner工具,一直认为,在开发脚本中检查点的设置是最容易的,直到现在,有一段时间没碰LR,今天录制了一段脚本,设置了文本检查点,回放脚本后,总是报错,描述一下我设置 ...
- 001 Anaconda的介绍与安装
1.官网 www.continuum.io 2.ananconda的版本 同一个版本下对应一个python3与python2,在这里下载使用python 2.7的版本. 3.概述 Anaconda是一 ...
- win7下docker环境搭建nginx+php-fpm+easyswoole开发环境
基础的环境已在文章nginx.php-fpm.swoole HTTP/TCP压测对比中搭建了,现在是在这个基础上在搭建easyswoole开发环境 主要要修改的地方是dnmp包里面的docker-co ...
- 最短路算法 -- SPFA模板
一.算法步骤 建立一个队列,初始时队列里只有起始点,再建立一个数组记录起始点到所有点的最短路径(该数组的初始值要赋为极大值,该点到它本身的路径赋为0,下面的模板中该数组为dist[]).然后执行松弛操 ...
- python 学习之dict和set类型
什么是dict 我们已经知道,list 和 tuple 可以用来表示顺序集合,例如,班里同学的名字: ['Adam', 'Lisa', 'Bart'] 或者考试的成绩列表: [95, 85, 59] ...
- ionic启动App时不使用淡入淡出效果
找到我们项目下面 res下面的config.xml,然后加入下面两句就可以解决. <preference name="FadeSplashScreen" value=&quo ...
- Am335x SPI 驱动测试
内核版本:3.14.65 CPU:Am335x 1.编译内核: make menuconfig Device Drivers -> <*>SPI support -> < ...
- Outlook数据提取工具readpst
Outlook数据提取工具readpst Outlook是Windows常用的邮件客户端.它将用户的信息保存到.pst文件中,如邮件.约会.日历.联系人等信息.为了便于查看这些信息,Kali Li ...
- iOS 9应用开发教程之iOS 9新特性
iOS 9应用开发教程之iOS 9新特性 iOS 9开发概述 iOS 9是目前苹果公司用于苹果手机和苹果平板电脑的最新的操作系统.该操作系统于2015年6月8号(美国时间)被发布.本章将主要讲解iOS ...