C#面向对象--命名空间

  一、在C#中,使用命名空间(Namespace)可以帮助控制自定义类型的作用范围,同时对大量的类型进行组织;使用namespace关键字声明命名空间,命名空间可以嵌套使用:

namespace MyNameSpace
{
    namespace MyNestedNameSpace
    {
        class MyClass
        {
            public void MyFunc()
            {
                //do...
            }
        }
    }
}

  1.命名空间默认即为public,没有任何访问限制,不能使用任何访问修饰符;

  2.在命名空间中的定义的五种基本类型(类class、结构struct、接口interface、枚举enum和委托delegate),只能是public或internal的,默认为internal的;

  3.每一种类型根据其命名空间的不同会拥有一个唯一名称,即完全限定名称(Fully Qualified Name),例如上面自定义类型MyClass的完全限定名称为MyNameSpace.MyNestedNameSpace.MyClass;

  ※完全限定名称才是CLR看到的实际类型名称;

  二、使用using关键字引用指定的命名空间,这样可在当前代码范围内免去为每个类型指定命名空间的名称,通过.运算符分隔嵌套的命名空间:

using MyNameSpace.MyNestedNameSpace;

  ※此时,可以直接在代码中访问MyNameSpace.MyNestedNameSpace命名空间中的MyClass类:

MyClass myClass = new MyClass();
myClass.MyFunc();

  三、使用using关键字还可以创建命名空间或类的别名(Alias Directive),从而在需要明确指定命名空间或类型的名称时简化代码:

  1.命名空间别名:

using My = MyNameSpace.MyNestedNameSpace;

  ※此时,可以通过My.MyClass访问MyNameSpace.MyNestedNameSpace命名空间中的MyClass类:

My.MyClass myClass = new My.MyClass();
myClass.MyFunc();

  ※对于命名空间别名在使用时,更好的方式是使用::运算符代替.运算符,以此避免在使用时将其理解为类型并可以防止意外引入与别名同名的类型:My::MyClass()

  2.类型别名:

using My = MyNameSpace.MyNestedNameSpace.MyClass;

  ※此时,可以直接通过别名My代替MyNameSpace.MyNestedNameSpace命名空间中的MyClass类:

My myClass = new My();
myClass.MyFunc();

  3.全局命名空间限定符global关键字与::运算符一起使用时,始终引用的是顶级根命名空间(.Net)中的类型,例如:

global::System.Collections.Generic.List<int>

 


如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的认可是我写作的最大动力!

作者:Minotauros
出处:https://www.cnblogs.com/minotauros/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

posted @ 2019-11-30 16:37  Minotauros  阅读(1618)  评论(0编辑  收藏  举报