侧边栏壁纸
博主头像
Komi博主等级

WizMan Komi

  • 累计撰写 30 篇文章
  • 累计创建 43 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

C# using用法之 资源释放

Komi
2022-02-27 / 0 评论 / 0 点赞 / 151 阅读 / 1,257 字
温馨提示:
内容仅供参考,实际使用需根据自身条件进行调整与删改

什么是using

Provides a convenient syntax that ensures the correct use of IDisposable objects. Beginning in C# 8.0, the using statement ensures the correct use of IAsyncDisposable objects.

微软官方给出的定义是将所有继承自IDisposable的类对象使用纠正,在C#8.0的版本后加入了所有继承自IAsyncDisposable的类对象

说人话就是 -> 对可释放资源自动释放的一种语法糖

具体用法

  1. 普遍用法
public void Func(){
  FileStream fs = new FileStream("test.txt",FileMode.Read);
  StreamReader sr = new StreamReader(fs);
  try{
    // IO manipulating code here...
  }catch(IOException exp){
    throw;
  }finally{
    if(sr!=null) sr.Dispose();
    if(fs!=null) fs.Dispose();
  }
}

这是在没有使用using语法的时候 需要人为的将资源手动释放

public void Func() {
    using (FileStream fs = new FileStream("test.txt",FileMode.Read)) {
        using (StreamReader sr = new StreamReader(fs)) {
            // IO manipulating code here...
        }
    }
}

这是使用using语法后的写法 效果等同于上面的写法

  1. 当有多个资源时的用法
public void Func(){
  using(SqlConnection conn = new SqlConnection(queryString))
  using(SqlCommand comm = new SqlCommand(queryString,conn))
  {
    conn.Open();
    // dataBase Query Manipulating.
    conn.Close();
  }
}
  1. 当有多个相同类型的资源的时候也可以用逗号分隔
public void Func(){
  using(FontEntity f1 = new FontEntity("Comic Sans MS",12.0f),f2 = new FontEntity("PingFangSC-Regular",14.0f))
  {
    // resource using...
  }
}

总结

实际上在使用using的用法在其他的语言上发现相似的地方 例如Java7以上就已经支持try-with-resources的写法 微软这里用了很巧妙的方式进行资源的合理回收

推荐文章: ->

https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/unmanaged

0

评论区