C# 命名空间详解(一)
一、命名空间的概念和定义
namespace 关键字用于声明包含一组相关对象的作用域。 可以使用命名空间来组织代码元素并创建全局唯一类型。
namespace SampleNamespace
{
class SampleClass { }
interface ISampleInterface { }
struct SampleStruct { }
enum SampleEnum { a, b }
delegate void SampleDelegate(int i);
namespace Nested
{
class SampleClass2 { }
}
}
在命名空间中,可以声明零个或多个以下类型:
- class
- interface
- struct
- enum
- delegate
- 可以声明嵌套的命名空间(文件范围的命名空间声明除外)
编译器会添加默认命名空间。 此未命名的命名空间(有时被称为全局命名空间)存在于每个文件中。 它包含未包含在已声明的命名空间中的声明。 全局命名空间中的任何标识符都可用于已命名的命名空间。
命名空间隐式具有公共访问权限。
二、命名空间的使用
1.using指令
using 指令允许使用在命名空间中定义的类型,而无需指定该类型的完全限定命名空间。 using 指令以基本形式从单个命名空间导入所有类型,如下例所示:
using System.Text;
可以将两个修饰符应用于 using 指令:
global 修饰符与将同一 using 指令添加到项目中的每个源文件具有相同的效果。 此修饰符是在 C# 10 中引入的。
global using <fully-qualified-namespace>;
static 修饰符从单个类型中导入该 static 成员和嵌套类型,而不是导入命名空间中的所有类型。
using static <fully-qualified-type-name>;
using static 指令适用于任何具有静态成员(或嵌套类型)的类型,即使该类型还具有实例成员。 但是,只能通过类型实例来调用实例成员。
2.using 别名
创建 using 别名指令,以便更易于将标识符限定为命名空间或类型。 在任何 using 指令中,都必须使用完全限定的命名空间或类型,而无需考虑它之前的 using 指令。 using 指令的声明中不能使用 using 别名。 例如,以下示例生成一个编译器错误:
using Project = PC.MyCompany.Project;
using s = System.Text;
using s.RegularExpressions; // Generates a compiler error.
三、外部别名
命名空间别名限定符提供 :: 对全局命名空间或其他可能由其他实体隐藏的别名的显式访问。
有时你可能不得不引用具有相同的完全限定类型名称的程序集的两个版本。 例如,可能需要在同一应用程序中使用某程序集的两个或多个版本。 通过使用外部程序集别名,可在别名命名的根级别命名空间内包装每个程序集的命名空间,使其能够在同一文件中使用。
using Class1V1 = GridV1::Namespace.Class1;
using Class1V2 = GridV2::Namespace.Class1;
using S = System.Net.Sockets;
class A
{
public static int x;
}
class C
{
public void F(int A, object S)
{
// Use global::A.x instead of A.x
global::A.x += A;
// Using ::, S must resolve to a namespace alias:
S::Socket s = S as S::Socket;
// In this form, if S were a class, it would be a compile-time error:
S.Socket s1 = S as S.Socket;
}
}
更多:
C# 数据类型、变量、作用域_c# 作用域-CSDN博客
C#中float, double的计算存在精度问题_c#double计算-CSDN博客
C#获取变量的数据类型_C#获取对象的数据类型_c# 获取变量类型-CSDN博客