c# - 在代码中间解释使用 C# 代码中的语句...(不在标题中作为加载库)
问题描述
请,任何人都可以向我解释c#“使用”中的声明。我知道我在程序头使用它来加载基本库,例如使用 System.Text;。但我不清楚,有什么区别:
using (var font1 = new Font("Arial", 10.0f))
{
byte charset = font1.GdiCharSet;
}
和:
using var font1 = new Font("Arial", 10.0f);
byte charset = font1.GdiCharSet;
是的,我阅读了 C# 的手册,但实际上我并不理解这一点。
解决方案
using
IDisposable
与实现接口的类型一起使用。
它确保当对象超出范围时,Dispose
调用该方法(如 中所定义IDisposable
)并且通常用于处置非托管资源。
您的第一个示例是传统的 using 块,其中对象范围由以下 {} 定义。
您的第二个是在 C#8 中引入的新 using 语句,其中范围是封闭块,与其他局部变量一样。
它大致相当于:
var font1 = new Font("Arial", 10.0f);
byte charset = font1.GdiCharSet;
font1.Dispose();
但正如凯西所指出的,它实际上确保了对象被处置,即使在块内抛出异常,即
var font1 = new Font("Arial", 10.0f);
try
{
byte charset = font1.GdiCharSet;
}
finally
{
if (font1 != null)
{
font1.Dispose();
}
}
推荐阅读
- scala - 使用 Spark/Scala 过滤带有 JSON 字段的 RDD 的 csv
- flutter - 如何在颤动中按下小部件时更改小部件的颜色?
- python - 在 Python 中使用带有 Lambda 的 Map 函数:TypeError: () 接受 0 个位置参数,但给出了 1 个
- amazon-web-services - 我们如何将 aws 实例区域从美国东部(弗吉尼亚北部)us-east-1 更改为亚太地区(孟买)ap-south-1?
- node.js - Nodemailer 无法识别来自环境变量的凭据
- php - Woocommerce 相关产品部分显示相同的产品
- jquery - jQuery自动完成无法使用ajax调用
- php - 使用 htaccess 更改 url 中的文件夹名称
- android - 在 GridLayout 中填充第 5 列的问题
- python - 文件的 Flask 服务器端会话管理