这篇文章主要记录一下namespace和using的主要作用和使用方法。
namespace主要有两方面的作用:1.用于类和方法的组织与范围限定。2.控制类和方法的使用范围。
namespace NameSpace1
{
public class Class1
{
}
}
上面的示例将Class1限定为NameSpace1命名空间范围内,如果我们需要使用Class1类型则需要使用它的完全限定名。
class Class2
{
NameSpace1.Class1 class1 = new NameSpace1.Class1();
}
命名空间和类一样也是可以进行嵌套的,如下所示:
namespace NameSpace1
{
namespace NameSpace2
{
class Class2
{
}
}
}
namespace NameSpace1.NameSpace2
{
class Class3
{
}
}
Class2和Class3都限定为NameSpace1.NameSpace2命名空间内,这两种写法的效果是一样的,但在我们实际编码中更常用下面一种的写法,这样会让我们的代码更加简洁。
在使用命名空间内的类型时除了直接使用完全限定名之外,还可以使用using来允许使用命名空间内的类型。
using System;
class Program
{
static void Main(string[] args)
{
Console.ReadKey();
}
}
上面的示例通过using System;我们可以使用到System命名空间下的Console类。
接下来介绍一下using的静态类型,使用using的静态类型可以直接访问到类型的静态成员,而无需限定使用类型名称进行访问。
using static System.Console;
class Program
{
static void Main(string[] args)
{
ReadKey();
}
}
因为ReadKey()是Console的静态成员,所以可以通过using static System.Console;的方式直接调用。
最后再来介绍一下通过using来使用命名空间的别名。先看示例:
namespace NameSpace1
{
class Class1
{
}
}
namespace NameSpace2
{
class Class1
{
}
class Class2
{
Class1 class1 = new Class1(); //NameSpace2.Class1
}
class Class3
{
NameSpace1.Class1 class1 = new NameSpace1.Class1();
}
}
上面的示例可以看到NameSpace1和NameSpace2两个命名空间中有两个都名为Class1的类,首先这样的写法是完全合法的,但这两个是名字相同的两个不同的类。因为命名空间作用域的关系Class2中创建的Class1的完全限定名是NameSpace2.Class1,而如果要创建NameSpace1.Class1则只能像Class3中一样写出其完全限定名。在实际开发过程中可能命名空间会有更多层的嵌套,那么我们在写完全限定名的时候就非常繁琐,使用命名空间的别名就会方便很多。如下所示:
using Alias = NameSpace1.Class1;
namespace NameSpace1
{
class Class1
{
}
}
namespace NameSpace2
{
class Class1
{
}
class Class2
{
Class1 class1 = new Class1(); //NameSpace2.Class1
}
class Class3
{
Alias class1 = new Alias(); //NameSpace2.Class1
}
}
通过定义命名空间别名Alias可以让原来需要使用完全限定名的地方代码更加简洁。
关于namespace和using的小知识点就先介绍到这里了,更多细节可以去查Microsoft的官方文档。关于C#所有细节都可以通过官方文档来查询,毕竟那是一手资料嘛。下面附上关于namespace和using的官方文档连接,喜欢的小伙伴可以再去多看看。
namespace:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/namespaces/using-namespaces
using:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/using-directive