【C# 基础概念】命名空间
命名空间
C#10 新功能====================
命名空间格式:声明所有后续声明都是已声明的命名空间的成员:
//C#10 命名空间的新写法,这种方式一个文件只能有一个命名空间。
//命名空间后面只能是类名、枚举、结构
namespace MyNamespace;
public class P { }
public class Pr { }
也可以不行命名空间,这种方式编译成dll时候,所有的内容会默认防止 类Program 的main函数里面。而Proram 没有命名空间.

Proram 没有命名空间,所有在写反射时候,Program前面没有命名空间。
Assembly se=Assembly.GetExecutingAssembly();
Type typ= se.GetType("Program", false);
//正常的类,前面应该加命名空间
Assembly se=Assembly.GetExecutingAssembly();
Type typ= se.GetType("NameSpace.Program", false);
全局的 using#
利用全局 using 可以给整个项目启用 usings,不再需要每个文件都写一份。比如你可以创建一个 Import.cs,然后里面写:
using System;
using i32 = System.Int32;
然后你整个项目都无需再 using System,并且可以用 i32 了。
===============================
命名空间是一系列类型名称的领域。通常情况下,类型组织在分层的命名空间里,既避免了命名冲突又更容易查找。例如,处理公钥加密的RSA类型就定义在如下的命名空间下:
System.Security.Cryptography
命名空间组成了类型名的基本部分。下面代码调用了RSA类型的Create方法:
System.Security.Cryptography.RSA rsa=System.Security.Cryptography.RSA.Create();
命名空间是独立于程序集的。程序集是像.exe或者.dll一样的部署单元。命名空间并不影响成员的public、internal、private的可见性。
namespace关键字为其中的类型定义了命名空间。例如:
namespace outer.Middle .Inner
{
class classl { }
class Class2 { }
}
命名空间中的“.”表明了嵌套命名空间的层次结构。下面的代码在语义上和上一个例子是等价的:
namespace outer(
namespace Middle{
namespace Inner{
class Classl {}class Class2 {}}
})
类型可以用完全限定名称(fully qualified name),也就是包含从外到内的所有命名空间的名称,来指定。例如,上述例子中,可以使用Outer.Middle.Inner.Class1来指代Class1。
如果类型没有在任何命名空间中定义,则它存在于全局命名空间(global namespace)中。全局命名空间也包含了顶级命名空间,就像前面例子中的Outer命名空间。
1、using指令
using指令用于导入命名空间。这是避免使用完全限定名称来指代某种类型的快捷方法。以下例子导入了前一个例子的Outer.Middle.Inner命名空间:
using outer.Middle . Inner;class Test
{
static void Main ( ){
classl c;l/ Don't need fully qualified name}
}
在不同的命名空间定义相同名称的类型是完全合法的,这也是命名空间存在的最基本的意义。然而,假设开发者同时导入了这些命名空间,在引用同名类型时会收到来自编译器的错误,(这个问题可以用2.3.5小节的类型和命名空间别名解决)。
2、using static指令
从C#6开始,我们不仅可以导入命名空间还可以使用using static指令导入特定的类型。这样就可以直接使用类型静态成员而不需要指定类型的名称了。在接下来的例子中,我们这样调用Console类的静态方法WriteLine:
using static system.Console;class Test
{
static void Main(){ writeLine ( "Hello");})
using static指令将类型的可访问的静态成员,包括字段、属性以及嵌套类型(后续章节会讲解),全部导入进来。同时,该指令也支持导入枚举类型的成员(后续章节会讲解)。因此如果导入了以下的枚举类型:
using static System.Windows.Visibility;
我们就可以直接使用Hidden而不是Visibility.Hidden了:
var textBox = new TextBox { Visibility = Hidden }; // XAML- style
C#编译器还没有聪明到可以基于上下文来推断出正确的类型,因此在导入多个静态类型导致二义性时会发生编译错误。
3、命名空间中的规则
3.1、名称范围
外层命名空间中声明的名称能够直接在内层命名空间中使用。以下示例中的Class1在Inner中不需要限定名称:
namespace outer{
class Classl { }
namespace Inner{
class Class2 : classl{ }}
)
使用统一命名空间分层结构中不同分支的类型需要使用部分限定名称。在下面的例子中,SalesReport类继承Common.ReportBase:
namespace MyTradingcompany{
namespace C ommon
class ReportBase { }}
namespace ManagementReporting{
class salesReport : Common. PeportBase{ }}
}
3.2、名称隐藏
如果相同类型名称同时出现在内层和外层命名空间中,则内层类型优先。如果要使用外层命名空间中的类型,必须使用它的完全限定名称。
namespace outer
class Foo { }
namespace Inner{
class Foo { }
class Test{
Foo fl;
// - outer .Inner.Foo
outer.Foo f2;/l = outer.Foo
)
})
所有的类型名在编译时都会转换为完全限定名称。中间语言(IL)代码不包含非限定名称和部分限定名称。
3.3、重复的命名空间
只要命名空间内的类型名称不冲突就可以重复声明同一个命名空间:
namespace outer.Middle .Inner{
class Class1 {}}
namespace outer. Middle . Inner{
class class2 {}
上述例子也可以分为两个不同的源文件,并将每一个类都编译到不同的程序集中(这个用处很大)。
3.4、嵌套的using指令
我们能够在命名空间中嵌套使用using指令,这样可以控制using指令在命名空间声明中的作用范围。在以下例子中,Class1在一个命名空间中可见,但是在另一个命名空间中不可见:
name space N1{
class Classl { }}
namespace N2
{
using Nl;
class class2 : class1 { }
}
namespace N2
{
class Class3 : class1 {}l /compile-time error
}
3.5、类型和命名空间别名
导入命名空间可能导致类型名称的冲突,因此可以只导入需要的特定类型而不是整个命名空间,并给它们创建别名。例如:
using PropertyInfo2 = system.Reflection.PropertyInfo;class Program{ PropertyInfo2 p; }
下面代码为整个命名空间创建别名:
using R = system.Reflection;
class Program { R.PropertyInfo p; }
【C# 基础概念】命名空间的更多相关文章
- 快速入门系列--WCF--01基础概念
转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...
- Hadoop基础概念介绍
基于YARN的配置信息, 参见: http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/ hadoop入门 - 基础概念 ...
- .NET技术面试题系列(1) 基础概念
这是.NET技术面试题系列第一篇,今天主要分享基础概念. 1.简述 private. protected. public.internal 修饰符的访问权限 private : 私有成员, 在类的内部 ...
- 九. Python基础(9)--命名空间, 作用域
九. Python基础(9)--命名空间, 作用域 1 ● !a 与 not a 注意, C/C++可以用if !a表示if a == 0, 但是Python中只能用if not a来表示同样的意义. ...
- .NET基础 (01).NET基础概念
.NET基础概念 1 什么是CTS.CLS和CLR2 开发和运行.NET程序需要的最基本环节是什么3 .NET是否支持多编程语言开发4 CLR技术和COM技术的比较5 什么是程序集和应用程序域 1 什 ...
- WCF分布式开发步步为赢(1):WCF分布式框架基础概念
众所周知,系统间的低耦合一直是大型企业应用系统集成追寻的目标,SOA面向服务架构的出现为我们的如何利用现有企业系统资源进行企业ERP系统设计和实现提供了重要的参考原则.SOA如此炙手可热,各大厂商都推 ...
- C#学习基础概念二十五问
C#学习基础概念二十五问 1.静态变量和非静态变量的区别?2.const 和 static readonly 区别?3.extern 是什么意思?4.abstract 是什么意思?5.internal ...
- [转帖]从0开始的高并发(一)--- Zookeeper的基础概念
从0开始的高并发(一)--- Zookeeper的基础概念 https://juejin.im/post/5d0bd358e51d45105e0212db 前言 前面几篇以spring作为主题也是有些 ...
- kubernetes基础概念知多少
kubernetes(简称k8s)是一种用于在一组主机上运行和协同容器化应用程序的管理平台,皆在提供高可用.高扩展性和可预测性的方式来管理容器应用的生命周期.通过k8s,用户可以定义程序运行方式.部署 ...
- K8s(一)----容器编排工具基础概念
kubernetes(k8s)容器编排工具基础概念 Kubernetes (K8s): 中文社区:https://www.kubernetes.org.cn/replication-controlle ...
随机推荐
- java多态成员变量、成员函数(非静态)、静态函数特点
1 package face_09; 2 3 /* 4 * 多态时, 5 * 成员的特点: 6 * 1,成员变量. 7 * 编译时:参考引用型变量所属类中的是否有调用的成员变量,有,编译通过:没有,编 ...
- Docker 与 K8S学习笔记(二十)—— 使用Downward API向容器注入Pod信息
Kubernetes在创建Pod时,会为Pod和容器设置一些额外的信息,比如Pod名称.Pod IP.Node IP.Label.Annotation.资源限制等,我们经常会在应用程序中使用到这些数据 ...
- elasticsearch算法之推荐系统的相似度算法(一)
一.推荐系统简介 推荐系统主要基于对用户历史的行为数据分析处理,寻找得到用户可能感兴趣的内容,从而实现主动向用户推荐其可能感兴趣的内容: 从物品的长尾理论来看,推荐系统通过发掘用户的行为,找到用户的个 ...
- Asp-Net-Core学习笔记:身份认证入门
前言 过年前我又来更新了~ 我就说了最近不是在偷懒吧,其实这段时间还是有积累一些东西的,不过还没去整理-- 所以只能发以前没写完的一些笔记出来 就当做是温习一下啦 PS:之前说的红包封面我还没搞,得抓 ...
- Linux配置 ElasticSearch
一.什么是ElasticSearch? 一.什么是ES? ES是一个分布式使用RestFul风格的数据搜索引擎,并且ES是构建在Lucene框架之上,也就是说ES也是基于Lucene进行开发的搜索引擎 ...
- 支付宝同步请求检查appid,以及公钥,私钥是否正确
第一步:下载支付宝Demo 下载地址:https://opendocs.alipay.com/open/270/106291#%E8%BF%90%E8%A1%8C%E8%AF%B4%E6%98%8E ...
- 为什么内部类调用的外部变量必须是final修饰的?
感谢原文:https://blog.csdn.net/u010393325/article/details/80643636 因为生命周期的原因.方法中的局部变量,方法结束后这个变量就要释放掉,fin ...
- C语言中数组长度不能用变量定义吗?
C语言里,所有变量空间都是在程序运行之初向系统申请的,包括指针,除了一些动态申请方式如malloc函数.没有申请的空间系统是不允许读写的.那么如果一个数组大小是变量定义,则在程序运行前不能确定数组大小 ...
- JS切割图片-滑动门效果
转载请注明来源:https://www.cnblogs.com/hookjc/ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...
- linux centos6.3 升级svn1.6到svn1.8
linux centos6.3 升级svn1.6 1. 删除svn1.6 #yum remover subverson12.设置svn1.8安装源 vim /etc/yum.repos.d/wandi ...