在C#中使用"using"关键字的作用

19

我想知道在C#中,“using”关键字的用途是什么,我是新手...我们何时需要使用“using”关键字...我查了一下谷歌,但没有得到令人满意的答案。仍然想从你们geeks那里获得更多信息。

谢谢。


6
使用using关键字是有用的。使用using可以帮助预防异常问题。使用using可以更有效地使用一次性对象。使用不同的using可以帮助你使用命名空间或类型名称。非常有用。 - Michael Burr
2
哈哈!很有用的评论,Michael! :D - Vilx-
另请参阅:使用:一个神奇的C#关键字 - Sachin Dhir
14个回答

32

两种用法:

  • 使用指令,例如

using System;
using System.IO;
using WinForms = global::System.Windows.Forms;
using WinButton = WinForms::Button;

这些用于导入命名空间(或创建命名空间或类型的别名)。它们位于文件顶部,在任何声明之前。

  • 使用语句,例如:

  • using (Stream input = File.OpenRead(filename))
    {
        ...
    }
    

    这只能用于实现了IDisposable接口的类型,并且是一个语法糖,用于在finally块中调用Dispose方法的try/finally块。这用于简化资源管理。


    你的意思是,每当我们使用 new 或其他方式创建对象时,最好使用 "using",这样我们就不需要显式地释放或关闭它们了,对吗? - Naruto
    3
    @GrabIt,正如Jon所说,只有实现IDisposable接口的对象需要这样做。 - ParmesanCodice
    @Jon 我经常想到为什么决定将“using”一词用于完全不同的目的。我知道这已经过时了,但看起来这似乎是引起你注意并提问同时保持主题相关性的最佳场所。谷歌在回答这个问题时并没有提供太多帮助。我知道指令形式模仿了C ++的用法,但IDisposable语句是如何产生的呢? - McGuireV10
    @McGuireV10:恐怕我没有参加那些会议 :) 但是考虑到 using 指令和 using 语句永远不可能出现在同一个位置,重用相同的关键字确实可以减少关键字的数量。 - Jon Skeet

    13

    using 在 C# 中有两个含义:

    • 对于 IDisposableusing 关键字表示当使用块结束时,将调用 Dispose 方法。
    • 对于 命名空间using 关键字表示引用导入的命名空间中的类型。

    下面是一个使用 using 块的基本示例:

    一个“虚拟”的可处理对象类:

    public class DisposableClass : IDisposable
    {
        public static bool WasDisposed { get; private set;}
    
        public void Dispose()
        {
            WasDisposed = true;
        }
    }
    

    这是一段演示Dispose何时被调用的非常简单的代码:

    [Test]
    public void DisposeSample()
    {
        using (var disposableClass = new DisposableClass())
        {
            Assert.IsFalse(DisposableClass.WasDisposed);
        }
    
        Assert.IsTrue(DisposableClass.WasDisposed);
    }
    

    10

    我猜你说的是使用控制块,而不是使用 [namespace] 语句。基本上,这个关键字是安全地初始化和释放对象的语法糖。它适用于任何实现了 IDisposable 接口的对象。

    using(MyType obj = new MyType())
    {
      ... do stuff.
    }
    

    相当于:

    MyType obj = new MyType();
    try
    {
      .... do stuff
    }
    finally
    {
      if(obj != null)
      {
          obj.Dispose();
      }
    }
    

    4

    这个关键字有两种用法。

    一种是当你懒得打出 System.Web.UI.WebControls.TextBox 时,你可以在代码文件顶部添加 using System.Web.UI.WebControls,然后只需写 TextBox 即可。它的作用仅仅是缩短你需要编写的代码(并且使其更易于阅读)。

    另一种用法与 IDisposable 接口有关。该接口用于需要在使用完毕后进行清理的对象,例如需要关闭的文件、数据库连接等等。你可以在需要的地方自己调用 Dispose() 方法,但使用这个关键字会更加方便。简而言之:

    using (var X = new MyObject())
    {
        // Code goes here
    }
    

    等同于:

    var X = new MyObject();
    try
    {
        // Code goes here   
    }
    finally
    {
        if ( X != null )
            X.Dispose();
    }
    

    再次强调,这是一种代码的简写形式,可以确保无论发生什么情况,Dispose()方法都将被调用。即使您的代码抛出异常或从方法中returnDispose()方法也将被调用。这样可以确保您不会意外地留下文件打开或其他操作。
    一般来说,如果您使用实现了IDisposable接口的对象,请将其放置在using块中。

    3
    “using”关键字也可以用来创建类型别名。这里的Item是Dictionary的一个别名。采用这种方法可以节省一些输入量 :)
    例如,
    using Item = System.Collections.Generic.Dictionary<string, string>;
    namespace Sample
    {
        using Records = Dictionary<int, Item>;
        public class Controller
        {
          Records recordDictionary = new Records();
        }
    }
    

    3
    有三个用途: 我认为一般来说,我无法比MSDN文章更清楚地解释。如果你对理解它们有困难,你最好发布一个更具体的问题,涉及你不理解的细节。

    2

    很确定在其他地方会有类似的重复内容......然而,简单来说,使用关键字用于指定正在创建的对象的范围。一旦对象退出using块,即Dispose会自动调用以释放对象。

    有关详细信息,请参见using 语句 (C#)


    2

    在使用完资源之后,using结构提供了一种简便的方法来清理资源。它甚至可以在出现异常的情况下自动清理资源。


    1

    使用关键字可以将命名空间或库与我们的程序关联起来,以便我们可以在程序中使用该库中可用的函数。这有点像引用。

    例如:using System.IO

    这意味着我们将使用该库中存在的一些函数

    您可以编写自己的库并使用using语句导入它。 例如:

    namespace MyProject.MyNamspace
    {
     public class MyCustomClass
     {
      public static string MyFunctionToSmile()
      {
       return "He he he heeee";
      }   
    }
    

    }

    在您的 C# 页面中使用此代码:

    using MyProject.MyNamspace
    
    public class MyClass
    {
     protected void Page_Load(object sender, EventArgs e)
     {
      Response.Write(MyCustomClass.MyFunctionToSmile());
     } 
    }
    

    Cool...!



    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接