【问题标题】:use of "using" keyword in c# [duplicate]在c#中使用“using”关键字[重复]
【发布时间】:2010-12-18 16:02:14
【问题描述】:

我想知道 c# 中“using”关键字的用途,我是新手.. 当我们需要使用“使用”关键字时..我用谷歌搜索了它,对答案不满意。我还是想从你们 Geeks 那里了解更多..

谢谢

【问题讨论】:

  • 使用using 关键字可能很有用。使用using 有助于防止使用异常时出现问题。使用using 可以帮助您更有效地使用一次性物品。使用不同的using 可以帮助您使用命名空间或类型名称。很有用。
  • 哈哈!一个有用的评论,迈克尔! :D

标签: c# .net asp.net


【解决方案1】:

使用在C#中有两种含义:

  • using for IDisposable 表示当 using 块结束时会调用 Dispose 方法。
  • using for namespace 表示导入的命名空间中的类型将在代码中被引用。

使用块如何工作的基本示例:

一个“虚拟”一次性类:

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);
}

【讨论】:

    【解决方案2】:

    很确定在某处会有一个副本......但是,简而言之,使用关键字用于指定您正在创建的对象的范围。对象在退出 using 块后即被释放,即自动调用 Dispose。

    更多详情请见using Statement (C#)

    【讨论】:

      【解决方案3】:

      它为您提供了一种在完成资源后清理资源的简单方法。使用 using 构造,一旦您完成使用资源,它们就会被自动释放。它甚至会在出现异常的情况下清理资源。

      【讨论】:

        【解决方案4】:
        【解决方案5】:

        有三种用途:

        我不相信我能比一般的 MSDN 文章更清楚地解释。如果您无法理解它们,最好就您不理解的细节发布一个更具体的问题。

        【讨论】:

          【解决方案6】:

          两种用途:

          • 使用指令,例如

            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 或其他东西创建对象时,最好使用“使用”对......所以我们不需要明确地处理或关闭它们吗?......
          • @GrabIt,正如 Jon 所说,只有那些实现 IDisposable 的人。
          • @Jon 我经常想知道将“使用”这个词用于非常不同的目的的不同寻常的决定。我知道这已经过时了,但它似乎是在保持与主题相关的同时引起您的注意和提问的最佳场所。谷歌在回答这个问题时没有多大帮助。我知道指令形式模仿了 C++ 的用法,但是 IDisposable 语句是如何通过的?
          • @McGuireV10: 恐怕我没有参加那些会议 :) 但是鉴于 using 指令和 using 语句永远不会出现在同一个地方,重复使用相同的关键字确实允许关键字更少。
          【解决方案7】:

          “using”关键字有两种用途:

          • 作为 using 指令,它允许在命名空间中使用类型。例如:using System.Web
          • 作为 using 语句,这仅适用于从 IDisposable 继承的类型。这会在 using 语句超出范围后自动调用对象上的Dispose() 方法,因此您不必担心自己会自动调用此方法,或者在数据库连接上调用Close(),例如:

            使用(MySqlConnection 连接 = new MySqlConnection()) { //.. }

          【讨论】:

            【解决方案8】:

            【讨论】:

              【解决方案9】:

              “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();
                  }
              }
              

              【讨论】:

                【解决方案10】:

                我假设您说的是 using 控制块,而不是 using [namespace] 语句。基本上,关键字是用于安全初始化和处置对象的语法糖。它适用于任何实现 IDisposable 的对象。 以下:

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

                相当于:

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

                【讨论】:

                  【解决方案11】:

                  using 关键字在 C# 中有两种不同的用法:

                  1. 声明隐式包范围,例如“使用系统;”
                  2. 调用 IDisposable 对象的 Dispose() 方法。

                  在后一种情况下,using(myVar) {} 是以下的简写:

                  IDisposable disposable = (IDisposable)myVar;
                  try
                  {
                     // your code here
                  }
                  finally
                  {
                     if (disposable != null)
                        disposable.Dispose();
                  }
                  

                  【讨论】:

                    【解决方案12】:

                    使用可用于:

                    • “导入”命名空间,即使用它们
                    • 为一个类型创建一个别名(就像 c++ 时代的 typedef
                    • 使用后立即处置对象

                    【讨论】:

                      【解决方案13】:

                      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());
                       } 
                      }
                      

                      酷...!

                      【讨论】:

                        【解决方案14】:

                        关键字有两种用途。

                        一个是当你懒得输入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() 方法都会被调用。即使你的代码抛出异常,或者你 return 退出方法,Dispose() 方法也会被调用。这样可以确保您不会意外地让文件处于打开状态或其他情况。

                        一般来说,如果您曾经使用过实现IDisposable 接口的对象,请将其放在using 块中。

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 2011-06-16
                          • 2011-10-10
                          • 2021-07-11
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多