C#命名空间

命名空间相当于文件夹,分别放置不同的类型。

比如基本的类型如int,string放在System命名空间。

引用命名空间

引用命名空间后,就可以使用短类型名称使用命名空间下的类型。

语法

using 命名空间;

可以引用多个命名空间。

可以引用命名空间但是不使用其中的类型。

using System;

class Program
{
    static void Main(string[] args){
        Console.WriteLine("Hello World");
    }
}

引用了命名空间后,就可以使用类型的短名称来使用类型了。

using语句也可以放在class内部,那么这个引用只在该类范围内有效。

编译之后的代码永远使用的是类型全名,using只是简化了代码量。

定义命名空间

可以为自己的类型定义命名空间。

语法:

namespace 命名空间名称
{

}

命名空间名称中间可以使用点来表达层次,但不可以是开始和结尾。

命名空间的定义可以嵌套,嵌套内部的命名空间为外部名称.内部名称

一般的,命名空间使用公司名.项目名.模块名

using System;
using System.Text;

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args){
            Console.WriteLine("Hello World");
        }
    }
}

命名空间可以更好的组织类型。

如果一个类型没有放在任何命名空间下,他将在全局空间,不需要任何命名空间引用即可使用。不建议将类型放在全局空间。

命名空间嵌套只存在于源代码,编译后的都是命名空间全名。

命名空间和程序集的关系

一个程序集可以使用多个命名空间。

一个命名空间可以被多个程序集使用。

程序集名称和命名空间可以不相同,一般程序集名称使用根命名空间名称。

引用静态类

引用静态类可以直接该类型下的所有方法。

语法:

using static 静态类类型全名
using System;
using System.Text;
using static System.Math;

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args){
            Console.WriteLine("Hello World");
            Console.WriteLine(Max(1,2));
        }
    }
}

引用了静态类System.Math后,就可以直接使用Math类的Max方法了。

别名引用

可以为一个类型设置别名,之后就可以通过别名使用类型。

using 别名 = 类型全名
using System;
using Con = Systen.Console;

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args){
            Con.WriteLine("Hello World");
        }
    }
}

设置了别名之后,可以通过别名使用类型。

别名并没有创建新类型,只是简化了代码。

设置别名后还可以使用原始名称。

类型名称冲突

如果本程序集内部的名称和using引用的相同,那么使用的是我们的类型。

这时为了使用外部类型,还需要使用类型全名。

using System;

class Console
{
    static void Main(string[] args){
       System.Console.WriteLine("Hello World");
    }
}

我们自己的类名是Console,覆盖了引用的Console,需要使用全名System.Console

命名空间名称冲突

偶尔,命名空间名称会和类型或者成员名称冲突,这时,需要别名限定。

语法:

别名::命名空间.类型名称

默认情况下,别名是global,表示全局。

using System;

class Console
{
    public static System {get;}

    static void Main(string[] args){
       global::System.Console.WriteLine("Hello World");
    }
}

我们的类Console有一个System属性,覆盖了命名空间名称。为了使用全局的System,在前面加上了global::

别名限定也可以用于不同程序集有命名空间和类型名完全相同的情况,这时需要为不同的程序集指定不同的别名,通过别名区分类型。

设置别名,可以在Visual Studio引用的程序集的属性选项中设置。

默认情况,所有引用的程序集别名都是global

如果使用命令行,使用/reference:<别名>=<文件>进行设置。