C#Using使用场景

C#中using关键字有三种使用场景:

  • 引入命名空间
  • 给命名空间取别名
  • 释放托管资源

引入命名空间

using MyNameSpace;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication18
{
    class Program
    {
        static void Main(string[] args)
        {
            SqlConnection conn = new SqlConnection();
        }
    }
}
namespace MyNameSpace
{
    public class SqlConnection
    {

    }
}

上述代码中,第一句 using MyNameSpace; 就是引入命名空间。

给命名空间取别名

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
namespace ConsoleApplication18
{
    using mns = MyNameSpace.xxx.xx;
    class Program
    {
        static void Main(string[] args)
        {
            mns.SqlConnection conn = new mns.SqlConnection();
        }
    }
}
namespace MyNameSpace.xxx.xx
{
    public class SqlConnection
    {
        public SqlConnection()
        {
            Console.WriteLine("This is MyNameSpace.SqlConnection.");
        }
    }
}

经过改造,我又导入一个新的命名空间 using System.Data.SqlClient ,刚好这个命名空间下也有一个叫SqlConnection类的定义,当两个命名空间同时被引入进来之后,编译器并不知道是创建哪个命名空间下得实例,所以编译器不能通过编译。

我们还把先前的MyNameSpace改长了点。这样如果使用命名空间+类名的方式来创建类的实例将是件很繁琐的事情,而且代码的可读性也会下降。

这时我们就可以使用 using语句来为命名空间取个别名

释放托管资源

众所周知,C#是由CLR托管执行的,它是类型安全的,CLR提供的类型检查、垃圾回收、异常处理、跨语言跨平台、内存管理等等众多的功能。

托管代码由CLR管理或执行,不能直接写类存,是类型安全的,由GC释放资源。

C#代码首先 - 编译为托管代码(IL代码) - 在由CLR托管执行

非托管代码:由系统管理和执行,无需中间编译,可以直接写内存,由程序员进行内存的分配和释放。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
namespace ConsoleApplication18
{
    using mns = MyNameSpace.xxx.xx;
    class Program
    {
        static void Main(string[] args)
        {
            mns.SqlConnection conn = new mns.SqlConnection();
            using (SqlConnection con=new SqlConnection())
            {

            }
        }
    }
}
namespace MyNameSpace.xxx.xx
{
    public class SqlConnection
    {
        public SqlConnection()
        {
            Console.WriteLine("This is MyNameSpace.SqlConnection.");
        }
    }
}

我们再次改造代码,看到使用了 using(SqlConnection con=new SqlConnection())

这就是using的第三个使用场景,释放托管资源。using括号中的类必须要继承System.IDisposable接口并实现Dispose方法。当using块执行完毕之后CLR会自动调用Dispose方法来释放资源。

其实using块就是一个try-finally,我们可以通过IL反汇编来查看

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值