首页 / C# / 正文

C#中的using关键字是什么?什么地方使用using?

8496 发布于: 2015-09-07 读完约需12分钟

概述

C#中的using关键字是什么?

我们需要明确:using是C#语言中的一个关键字。

所以在C#的编码过程中我们是不能直接使用using这个字符串来作为变量名的。

什么地方使用using?

在C#的编码中using大致有两种使用场景:

using使用场景一

1.使用using关键字引入命名空间

首先在Visual Studio中创建一个名为UsingDemo的类库项目,IDE会自动为我们创建一个同名(UsingDemo)的解决方案,再在项目中新建一个类,取名Blog.cs,示例代码片段:

/*此处使用了using 关键字来引入System命名空间
 *注意:System命名空间的.NET Framework库自带的命名空间
 *     所以,只在项目中引用了System这个类库,就可以在这里直接使用using来引入
 *     在新建C#项目类库项目时,IDE默认是引入了System类库的
 */
using System;

/*此处的UsingDemo就是自定义的命名空间
 *我们可以在其他引用了UsingDemo这个项目的文件中使用using来引入UsingDemo这个命名空间
 */
namespace UsingDemo
{
  /// <summary>
  /// 声明一个名为Blog的类
  /// </summary>
  public class Blog
  {
    public int Id { get; set; }
    public string Title { get; set; }
    public string Post { get; set; }
    public DateTime CreatedOn { get; set; }
  }
}

在代码片段中,我们首先使用using关键字来引入System这个命名空间,在这里using就是起到引入指定命名空间的作用。

说明:示例中的namespace即声明了一个命名空间,上面的示例即声明了一个名为”UsingDemo”的命名空间,我们可以在其他引用了UsingDemo这个项目的文件中使用using来引入UsingDemo这个命名空间。

再在UsingDemo解决方案中新建一个名为:UsingDemo.Client的控制台应用程序项目。

在UsingDemo.Client的项目的”引用”中右键单击”添加引用”,在弹出的”引用管理器”中点击”解决方案”选项卡,勾选我们上面创建的”UsingDemo”项目。

这样,我们就在UsingDemo.Client控制台应用程序项目中成功引用了”UsingDemo”这个项目。

那么,我们就可以在UsingDemo.Client项目的cs文件中使用using关键字来引入”UsingDemo”这个命名空间,如下代码示例片段:

using System;
//使用using关键字来引入我们自定义的命名空间--UsingDemo
using UsingDemo;

namespace UsingDemo.Client
{
  class Program
  {
    static void Main(string[] args)
    {
      //实例化一个Blog类
      var blog = new Blog
      {
        Id = 1,
        Title = "博客标题",
        Post = "博客内容",
        CreatedOn = DateTime.Now
      };
      Console.WriteLine("Title:{0}", blog.Title);
      Console.WriteLine("-----------------------------------------");
      Console.WriteLine("Post:{0}", blog.Post);
      Console.WriteLine("-----------------------------------------");
      Console.WriteLine("CreatedOn:{0}", blog.CreatedOn);
      Console.WriteLine("-----------------------------------------");
      Console.ReadKey();
    }
  }
}

运行结果如图:

using-demo-1

好了,以上就是对using关键字引入命名空间的使用的示例说明。

using使用场景二

2.using语句块

using语句块可以很好地为我们管理内存资源。

在C#和其他托管语言中,没有自动、决定性的析构方式,而是有一个垃圾收集器,它会在未来的某个时刻释放资源。它是非决定性的,因为我们不能确定这个过程在什么时候发生。

下面以连接数据库为例来说明使用using语句块的好处。

在数据库的操作上,我们需要先定义数据库的连接字符串,再打开连接进行相应的数据操作,使用完数据库连接后,我们还得把这个连接关闭掉。看一下不用using语句块的场景:

try
{
    //定义数据库连接字符串
    var strConn = "数据库连接字符串";
    //定义并实例化一个连接类
    var conn = new SqlConnection(strConn);

    //打开数据库连接
    conn.Open();

    //相应的数据库操作和业务逻辑处理

    //手动关闭数据库连接(注意:数据库连接使用之后一定记得关闭)
    conn.Close();
    }
    catch (Exception e)
    {
    //处理异常
}

在以上代码片段中,我们必须手动去关闭数据库的连接以及手动使用try…catch语句块来处理异常。那么如果使用using语句块会如何呢?也是一样,看示例代码片段:

//定义数据库连接字符串
var strConn = "数据库连接字符串";
using (var conn = new SqlConnection(strConn))
{
    //打开数据库连接
    conn.Open();
    //相应的数据库操作和业务逻辑处理
}

在这个示例中,无论块是如何退出的,using子句都会确保关闭数据库连接。

查看一下连接类的Dispose()方法的IL代码,它们都检查连接对象的当前状态,如果其状态为打开,就调用Close()方法。

浏览.NET程序 集的一个强大工具是Reflector(可以从/www.aisto.com/roeder/dotnet/上获得)。这个工具允许查看任何.NET方法 的IL代码,还可以把IL代码反编译为源代码,让我们轻松地确定给定的方法的作用。

另外,如果在using块中出现了异常,using子句就会确保在资源上调用IDisposable.Dispose方法,在本例中将确保总是关闭数据库连接。这样,与必须确保在异常子句中关闭连接相比,代码的可读性更高。

最后,如果编写一个封装资源的类,无论该资源是什么,都应实现IDisposable接口,关闭资源。这样,任何使用该类的代码都可以利用using()语句,以确保资源被释放。

C# 8中的using声明

在C# 8中,新增了using declaration语法,即:C#的变量被using关键字修饰,类似如下:

using var reader = new StringReader(manyLines);

上以示例代码中的变量reader即被关键字using修饰。using语句提供了一种方便的语法,可以确保正确使用IDisposable对象。

简单来说,它是using语句块的一种简写。如下有一种传统的using语句块写法的代码片段:

string manyLines = @"This is line one
This is line two
Here is line three
The penultimate line is line four
This is the final, fifth line.";

using (var reader = new StringReader(manyLines))
{
    string? item;
    do
    {
        item = reader.ReadLine();
        Console.WriteLine(item);
    } while (item != null);
}

使用using声明的写法如下:

string manyLines = @"This is line one
This is line two
Here is line three
The penultimate line is line four
This is the final, fifth line.";

using var reader = new StringReader(manyLines);
string? item;
do
{
    item = reader.ReadLine();
    Console.WriteLine(item);
} while (item != null);

using声明的写法中,被using修饰的变量会在此变量的作用域结束时自动释放资源。

注意:所有能被using修饰的变量的类型必须实现IDisposable或者IAsyncDisposable接口。

比如,这里被using修饰的reader变量的类型为StringReaderStringReader是实现了IDisposable接口的,如下图:

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: 非常漂亮精致基于Bootstrap+Material+Angular的轻量级响应式后台管理系统模板框架UI

下一篇: C#/.NET连接各类主流数据库(SQL Server,MySQL,Microsoft Access,DB2,Oracle)的连接字符串整理

本文永久链接码友网 » C#中的using关键字是什么?什么地方使用using?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册