程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> using,use

using,use

編輯:C#入門知識

using,use


using關鍵字有兩個主要用途:

  • 作為指令,為命名空間創建別名或導入其他命名空間中的類型。
  • 作為語句,定義一個范圍,在此范圍的末尾將釋放對象。

using指令

using指令有兩個用途:

  • 導入其他命名空間中的類型:
  • using System.Text;
  • 為命名空間或類型創建別名:
  • using Project = PC.MyCompany.Project;

using指令的特點:

  • using指令的作用范圍限制為包含它的文件,在其他文件中的using指令,對現有文件無效。
  • using別名,用於方便講標識符限定到命名空間或類型。using別名指令的右側必須是一個完全限定類型。且與前面的using指令無關。
  • using指令,便於在命名空間中使用而類型,而不必指定命名空間。
  • using指令不提供對嵌套在指定命名空間中的任何命名空間的訪問。

示例1

下面的示例演示如何為命名空間定義和使用using別名

namespace PC
{
    // Define an alias for the nested namespace.
    using Project = PC.MyCompany.Project;
    class A
    {
        void M()
        {
            // Use the alias
            Project.MyClass mc = new Project.MyClass();
        }
    }
    namespace MyCompany
    {
        namespace Project
        {
            public class MyClass { }
        }
    }
}
using別名指令的右側不能由開放的泛型類型。例如,不能是List<T>,但可以為List<int>創建別名。

示例2

下面演示如何為類定義using指令和using別名:

using System;

// Using alias directive for a class.
using AliasToMyClass = NameSpace1.MyClass;

// Using alias directive for a generic class.
using UsingAlias = NameSpace2.MyClass<int>;

namespace NameSpace1
{
    public class MyClass
    {
        public override string ToString()
        {
            return "You are in NameSpace1.MyClass.";
        }
    }

}

namespace NameSpace2
{
    class MyClass<T>
    {
        public override string ToString()
        {
            return "You are in NameSpace2.MyClass.";
        }
    }
}

namespace NameSpace3
{
    // Using directive:
    using NameSpace1;
    // Using directive:
    using NameSpace2;

    class MainClass
    {
        static void Main()
        {
            AliasToMyClass instance1 = new AliasToMyClass();
            Console.WriteLine(instance1);

            UsingAlias instance2 = new UsingAlias();
            Console.WriteLine(instance2);

        }
    }
}
// Output: 
//    You are in NameSpace1.MyClass.
//    You are in NameSpace2.MyClass.

using語句

便於正確使用IDisposable對象。

示例

下面演示如何使用using語句。

using (Font font1 = new Font("Arial", 10.0f)) 
{
    byte charset = font1.GdiCharSet;
}

File和Font是訪問非托管資源的托管類型的示例。還有許多其他類型的非托管資源和對應封裝這些資源的類庫。所有這些類型都必須實現IDisposable接口。

當使用IDisposable對象時,應該在using語句中聲明和實例化此對象。using語句能自動調用對象的Dispose方法,在調用Dispose時對象離開其作用域。在using塊中,對象時只讀,不能修飾也不能重新賦值。

using語句確保Dispose方法的調用,即使發生了異常。也可以將對象放在try塊中並在finally塊中調用Dispose來達到同樣的效果,實際上,編譯器就是將using語句轉換為這種形式。上面的代碼在編譯時會擴展為下面形式:

{
  Font font1 = new Font("Arial", 10.0f);
  try
  {
    byte charset = font1.GdiCharSet;
  }
  finally
  {
    if (font1 != null)
      ((IDisposable)font1).Dispose();
  }
}

如下所示,可以在using語句中聲明一個類型的多個實例。

using (Font font3 = new Font("Arial", 10.0f),
            font4 = new Font("Arial", 10.0f))
{
    // Use font3 and font4.
}

也可以實例化資源對象之後,將變量傳遞給using語句。不過這不是最佳做法。在這種情況下,該對象在控制權離開using語句之後還可見,但它可能不再具有對非托管資源的訪問權,如果嘗試在using塊外部使用該對象,就可能引發異常。所以最好在using語句中實例化該對象並將其作用域限制在using塊中。

Font font2 = new Font("Arial", 10.0f);
using (font2) // not recommended
{
    // use font2
}
// font2 is still in scope
// but the method call throws an exception
float f = font2.GetHeight();

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved