What are the uses of “using” in C#?

后端 未结 29 2727
有刺的猬
有刺的猬 2020-11-21 07:31

User kokos answered the wonderful Hidden Features of C# question by mentioning the using keyword. Can you elaborate on that? What are the uses of

29条回答
  •  有刺的猬
    2020-11-21 07:46

    There are two usages of the using keyword in C# as follows.

    1. As a directive

      Generally we use the using keyword to add namespaces in code-behind and class files. Then it makes available all the classes, interfaces and abstract classes and their methods and properties in the current page.

      Example:

      using System.IO;
      
    2. As a statement

      This is another way to use the using keyword in C#. It plays a vital role in improving performance in Garbage Collection.

      The using statement ensures that Dispose() is called even if an exception occurs when you are creating objects and calling methods, properties and so on. Dispose() is a method that is present in the IDisposable interface that helps to implement custom Garbage Collection. In other words if I am doing some database operation (Insert, Update, Delete) but somehow an exception occurs then here the using statement closes the connection automatically. No need to call the connection Close() method explicitly.

      Another important factor is that it helps in Connection Pooling. Connection Pooling in .NET helps to eliminate the closing of a database connection multiple times. It sends the connection object to a pool for future use (next database call). The next time a database connection is called from your application the connection pool fetches the objects available in the pool. So it helps to improve the performance of the application. So when we use the using statement the controller sends the object to the connection pool automatically, there is no need to call the Close() and Dispose() methods explicitly.

      You can do the same as what the using statement is doing by using try-catch block and call the Dispose() inside the finally block explicitly. But the using statement does the calls automatically to make the code cleaner and more elegant. Within the using block, the object is read-only and cannot be modified or reassigned.

      Example:

      string connString = "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;";
      
      using (SqlConnection conn = new SqlConnection(connString))
      {
            SqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = "SELECT CustomerId, CompanyName FROM Customers";
            conn.Open();
            using (SqlDataReader dr = cmd.ExecuteReader())
            {
               while (dr.Read())
               Console.WriteLine("{0}\t{1}", dr.GetString(0), dr.GetString(1));
            }
      }
      

    In the preceding code I am not closing any connection; it will close automatically. The using statement will call conn.Close() automatically due to the using statement (using (SqlConnection conn = new SqlConnection(connString)) and the same for a SqlDataReader object. And also if any exception occurs it will close the connection automatically.

    For more information, see Usage and Importance of Using in C#.

提交回复
热议问题