C#中using的使用方式详解

 更新时间:2023年06月24日 13:33:37   作者:相遇就是有缘   阅读(  
这篇文章主要介绍了C#中using的使用方式方式详解,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

C#中 using 关键字主要有以下几种方式。

1. 引入命名空间

例如:using System,几乎每个类中都会用到。

2.为引入的命名空间起别名

using + 别名 = 包括详细命名空间信息的具体的类型

using aClass = NameSpace1.MyClass;
using bClass = NameSpace2.MyClass;<br>

优点:当同一个cs引用了两个不同的命名空间,但两个命名空间都包括了一个相同名字的类型的时候。当需要用到这个类型的时候,就每个地方都要用详细命名空间的办法来区分这些相同名字的类型。而用别名的方法会更简洁,用到哪个类就给哪个类做别名声明就可以了。注意:并不是说两个名字重复,给其中一个用了别名,另外一个就不需要用别名了,如果两个都要使用,则两个都需要用using来定义别名的。

3.自动释放创建的对象

作用:

1. 自动释放非托管资源,避免缓存,内存溢出,允许程序员指定使用资源的对象应当何时释放资源。

2.简化try catch 得到在此定义域内自动释放所新建的对象,以简化代码;

本质:在程序编译阶段,编译器会自动将using语句生成为try-finally语句,并在finally块中调用对象的Dispose方法,来清理资源。所以,using语句等效于try-finally语句。

Font f2 = new Font("Arial", 10, FontStyle.Bold);
 try
 {
  }
 finally
 {
    if (f2 != null) ((IDisposable)f2).Dispose();
 }

注意事项:

1. 括号内使用的对象必须实现 IDisposable 接口。此接口提供了 Dispose 方法,该方法将释放此对象的资源。禁止为不支持IDisposable接口的类型使用using语句,否则会出现编译错误。

 using (MemoryStream ms = new MemoryStream())
 {
     qrCodeImage.Save(ms, ImageFormat.Jpeg);
     returnImageData = ms.GetBuffer();
     ms.Close();
 }

2.using语句适用于清理单个非托管资源的情况,而多个非托管对象的清理最好以try-finnaly来实现,因为嵌套的using语句可能存在隐藏的Bug。内层using块引发异常时,将不能释放外层using块的对象资源。

3.using语句支持初始化多个变量,但前提是这些变量的类型必须相同,例如:

using(Pen p1 = new Pen(Brushes.Black), p2 = new Pen(Brushes.Blue))
{
}

4.针对初始化对个不同类型的变量时,可以都声明为IDisposable类型

 using (IDisposable font = new Font("Verdana", 12), pen = new Pen(Brushes.Black))
 {
    float size = (font as Font).Size;
    Brush brush = (pen as Pen).Brush;
 }

人生如逆旅我亦是行人

到此这篇关于C#中using的使用方式的文章就介绍到这了,更多相关C#中using的使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C# Soap调用WebService的实例

    C# Soap调用WebService的实例

    下面小编就为大家带来一篇C# Soap调WebService的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • C#6 null 条件运算符

    C#6 null 条件运算符

    本文主要对比C# 6 null运算符与老版本的不同,并且用代码实例测试,发现新语法性能提高,语法简化了。希望看到的同学对你有所帮助
    2016-07-07
  • C#实现从后往前反向读取文件指定行数

    C#实现从后往前反向读取文件指定行数

    文件读取通常遵循正向流式处理,这种模型在大多数场景下高效且直观,但特定业务需求迫使我们必须逆向思考,下面我们就来看看C#如何实现从后往前反向读取文件指定行数吧
    2026-05-05
  • C#实现Bitmap类型与Byte[]类型相互转化的示例详解

    C#实现Bitmap类型与Byte[]类型相互转化的示例详解

    在C#编程中,Bitmap类型和Byte[]类型之间的相互转化是图像处理和数据传输中常见的需求,Bitmap类型表示一个位图图像,而Byte[]类型则是一个字节数组,本文将详细介绍如何在这两种类型之间进行相互转化,需要的朋友可以参考下
    2024-07-07
  • 利用C#实现SSLSocket加密通讯的方法详解

    利用C#实现SSLSocket加密通讯的方法详解

    这篇文章主要给大家介绍了关于如何利用C#实现SSLSocket加密通讯的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-07-07
  • C# 原生编码智能体运行时 SharpClawCode详解

    C# 原生编码智能体运行时 SharpClawCode详解

    SharpClawCode是一个专为 .NET 10 和 C# 13 生态系统设计的C# 原生编码智能体运行时(coding-agent runtime),本文给大家介绍C#原生编码智能体运行时 SharpClawCode的相关知识,感兴趣的朋友一起看看吧
    2026-04-04
  • C#比较数组是否相同的3种方式小结

    C#比较数组是否相同的3种方式小结

    本文主要介绍了C#比较数组是否相同的3种方式小结,主要包括SequenceEqual()方法,循环的方式比较,StructuralComparisons.StructuralEqualityComparer方式,感兴趣的可以了解一下
    2024-01-01
  • C#中SetStyle的具体使用

    C#中SetStyle的具体使用

    本文主要介绍了C#中SetStyle的具体使用,该方法用于启用或禁用特定的控件样式,以控制控件的行为和外观,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • C# 脚本引擎RulesEngine的使用详解

    C# 脚本引擎RulesEngine的使用详解

    这篇文章主要介绍了C# 脚本引擎RulesEngine的使用方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2021-02-02
  • 使用C#实现将Word 转文本存储到数据库并进行管理

    使用C#实现将Word 转文本存储到数据库并进行管理

    这篇文章主要为大家详细介绍了如何使用C#实现将Word 转文本存储到数据库并进行管理,文中的示例代码讲解详细,需要的小伙伴可以参考一下
    2024-03-03

最新评论