1. using 指令:引入命名空间
最常用的用法。通过using + 命名空间名字
,可以在程序中直接使用该命名空间中的类型,而无需指定类型的完整命名空间路径。例如:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> numbers = new List<int>(); // 直接使用System.Collections.Generic中的List类型
numbers.Add(1);
Console.WriteLine(numbers[0]); // 直接使用System中的Console类型
}
}
2. using static 指令:引入静态成员
通过using static + 类型
,可以指定无需指定类型名称即可访问其静态成员的类型。使用该指令后,在代码中可以直接使用该类型的静态成员,而不必通过类型名来调用。例如:
using static System.Math;
class Program
{
static void Main()
{
double result = Sqrt(16); // 直接使用System.Math的静态方法Sqrt
Console.WriteLine(result);
}
}
3. using 别名:为类型创建别名
当同一个 C# 文件引用了两个不同的命名空间,且这两个命名空间中都包含一个相同名字的类型时,为了避免混淆,可以使用using + 别名 = 包括详细命名空间信息的具体类型
的方式为类型创建别名。例如:
using aClass = NameSpace1.MyClass;
using bClass = NameSpace2.MyClass;
namespace NameSpace1
{
public class MyClass
{
public override string ToString()
{
return "You are in NameSpace1.MyClass";
}
}
}
namespace NameSpace2
{
class MyClass
{
public override string ToString()
{
return "You are in NameSpace2.MyClass";
}
}
}
namespace testUsing
{
class Class1
{
static void Main()
{
aClass my1 = new aClass();
Console.WriteLine(my1);
bClass my2 = new bClass();
Console.WriteLine(my2);
}
}
}
4. using 语句:自动释放资源
using
语句用于定义一个范围,在范围结束时自动调用对象的Dispose
方法来释放资源。通常用于处理实现了IDisposable
接口的对象,比如文件流、数据库连接等。语法形式为:
using (var resource = new ResourceType())
{
// 使用resource对象的代码
}
// 离开这个代码块后,resource的Dispose方法会被自动调用,释放相关资源
例如,使用文件流读取文件内容时:
using (System.IO.StreamReader reader = new System.IO.StreamReader("test.txt"))
{
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
// 读取完毕后,StreamReader对象的Dispose方法会自动被调用,释放文件资源
这样可以确保即使在代码块中发生异常,相关资源也能被及时释放,避免资源泄漏。
扩展:
如何使用C#的using语句释放资源?什么是IDisposable接口?与垃圾回收有什么关系?-CSDN博客
什么情况下,C#需要手动进行资源分配和释放?什么又是非托管资源?-CSDN博客