C# using
最后修改于 2025 年 5 月 21 日
C# using 教程展示了如何在 C# 中使用 using 语句/指令。
using
关键字有三种不同的用途
- using 语句
- using 指令
- using static 指令
using 语句定义了一个作用域,在该作用域结束时,对象将被释放。 using 指令创建一个命名空间的别名或导入其他命名空间中定义的类型。 using static 指令导入类的成员。 这允许我们使用静态成员,而无需使用类名限定它们。
The Battle of Thermopylae was fought between an alliance of Greek city-states, led by King Leonidas of Sparta, and the Persian Empire of Xerxes I over the course of three days, during the second Persian invasion of Greece.
我们从这个文本文件中读取。
C# using 语句
必须在非托管资源(如文件、流或窗口句柄)上调用 Dispose
方法。 传统上,资源在 try/(catch)/finally
语句的 finally
块中释放。
当对象超出作用域时,using
语句会自动释放资源。 它还确保在发生异常时调用 Dispose
。
如果一个对象继承自 IDisposable
接口,则必须显式释放它。
using System.Text; var path = "thermopylae.txt"; using var fs = new FileStream(path, FileMode.Open, FileAccess.Read); using var sr = new StreamReader(fs, Encoding.UTF8); string content = sr.ReadToEnd(); Console.WriteLine(content);
在此示例中,我们从文本文件中读取。
using var fs = new FileStream(path, FileMode.Open, FileAccess.Read); using var sr = new StreamReader(fs, Encoding.UTF8);
FileStream
和 StreamReader
都继承自 IDisposable
接口。 使用 using
语句,我们可以确保当这两个对象超出作用域时(在我们的例子中,当它们到达文件末尾时)资源被正确释放。
旧的语法需要创建一个带有花括号的块。
using System.Text; var path = "thermopylae.txt"; using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read)) { using (var sr = new StreamReader(fs, Encoding.UTF8)) { string content = sr.ReadToEnd(); Console.WriteLine(content); } }
两个 using
语句都创建了它们自己的块。
可以将 using
语句分组在一起。
using System.Text; var path = "thermopylae.txt"; using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read)) using (var sr = new StreamReader(fs, Encoding.UTF8)) { string content = sr.ReadToEnd(); Console.WriteLine(content); }
在该示例中,我们有一种替代语法; 我们创建一个包含两个 using
语句的块。
最旧的语法使用 try/finally
关键字。
using System.Text; var path = "thermopylae.txt"; FileStream? fs = null; StreamReader? sr = null; try { fs = new FileStream(path, FileMode.Open, FileAccess.Read); sr = new StreamReader(fs, Encoding.UTF8); string content = sr.ReadToEnd(); Console.WriteLine(content); } finally { fs?.Close(); sr?.Close(); }
在 finally
子句中,我们使用 Close
方法关闭资源。 请注意,Close
也会调用 Dispose
。
C# 引入了几种方便的方法来读取文本,例如 File.ReadAllLines
或 File.ReadAllText
。 这些方法会自动为我们调用 Dispose
方法。
using System.Text; var path = "/home/janbodnar/Documents/thermopylae.txt"; string content = File.ReadAllText(path, Encoding.UTF8); Console.WriteLine(content);
根据文档,ReadAllText
方法打开一个文本文件,将文件中的所有文本读取到字符串中,然后关闭该文件。
C# using 指令
using 指令允许我们使用特定命名空间的类型,这样我们就不必完全限定该命名空间中类型的使用。
int[] vals = [1, 4, -5, 3, -3, -1, 0, 2, 6, 7]; var positive = vals.Where(e => e > 0); Console.WriteLine(string.Join(" ", positive));
我们在文件顶部使用两个 using
指令。 它们允许我们使用 Console.WriteLine
和 Where
方法。
但自从 C# 10 以来,这两个语句是多余的。 默认情况下,我们将它们包含在隐式全局 using 中。
C# using 指令用于别名
使用 using
指令,我们还可以创建别名。
using Terminal = System.Console; Terminal.WriteLine("Hello there!");
在此示例中,我们为 System.Console
创建一个别名。
C# using static 指令
using static
允许我们访问类型的静态成员和嵌套类型,而无需使用类型名称限定访问。
using static System.Math; Console.WriteLine(Sqrt(3*3 + 4*4));
在此示例中,我们将 Sqrt
方法导入到我们的命名空间中。 现在我们可以使用它,而无需 Math.
前缀。
来源
在本文中,我们使用了 C# 中的 using
语句/指令。
作者
列出所有 C# 教程。