基础知识之

C#里面Using有两种用法:

1.作为指令。

  •  using+命名空间,导入其他命名空间中定义的类型,这样可以在程序中直接用命名空间中的类型,不必指定命名空间;

命名空间是.NET程序在逻辑上的组织结构,而并非实际的物理结构,是一种避免类名冲突的方法,用于将不同的数据类型组合划分的方式。

using System;
  •  using + 别名 = 命名空间,为命名空间或类型创建别名。


别名的好处是:当同一个文件下引用了不同的两个命名空间,但这两个命名空间都包括了一个相同名字的类型时,可以用别名的形式引用,这样可以方便使用。 

以using创建别名,有效的解决了这种可能的命名冲突,尽管我们可以通过类型全名称来加以区分,但是这显然不是最佳的解决方案,using使得这一问题迎刃而解,不费丝毫功夫,同时在编码规范上看来也更加的符合编码要求。

using aClass = NameSpace1.MyClass;
using bClass = NameSpace2.MyClass;

2.作为语句。

  • 于定义一个范围,在此范围的末尾将释放对象,

C# 通过 .Net Framework 公共语言运行库(CLR)自动释放用于存储不再需要的对象的内存。内存的释放具有不确定性;

一旦CLR决定执行垃圾回收,就会释放内存。但是,通常最好尽快释放诸如:文件句柄和网路连接这样的有限资源。

using语句允许指定使用资源的对象应当何时释放。为using语句提供的对象必须实现IDisposable接口。此接口提供了Dispose方法,该方法释放对象的资源。

可以在到达 using 语句的末尾时,或者在该语句结束之前引发了异常并且控制权离开语句块时,退出 using 语句。

using System;
class C :
IDisposable
{
    public void UseLimitedResource()
    {
        Console.WriteLine("Usinglimitedresource...");
    }
    void IDisposable.Dispose()
    {
        Console.WriteLine("Disposinglimitedresource.");
    }
}
class Program
{
    static void Main()
    {
        using (C c = new C())
        {
            c.UseLimitedResource();
        }
        Console.WriteLine("Nowoutsideusingstatement.");
        Console.ReadLine();
    }
}

结果如下:

  • Dispose方法用于清理对象封装的非托管资源,而不是释放对象的内存,对象的内存依然由垃圾回收器控制。
  •  程序在达到using语句末尾时退出using块,而如果到达语句末尾之前引入异常则有可能提前退出。

总结:

using可以用于引入命名空间;用于别名;用于定义资源范围。 

原文地址:https://www.cnblogs.com/SweetMemory/p/7160115.html