1. 命名空間別名

  • 命名空間(namespace)的作用是允許在不同的命名空間下定義多個同名 class。
  • 使用命名空間別名(namespace alias)可以避免為了保證命名唯一而使用命名空間而導致的命名過度冗長。
using System;
using WinForms = System.Windows.Forms;
using WebForms = System.Web.UI.WebControls;

class Program
{
    public static void Main()
    {
        Console.WriteLine(typeof(WinForms.Button));
        Console.WriteLine(typeof(WebForms.Button));
    }
}

2. 命名空間別名限定字符

  • 上例的程式碼存在一個潛在的問題,如果程式中同時引用了一個同名類別,如 class WinForms,那麼 WinForms.Button 就會被判斷成該類別的 Button 成員。
  • 為了避免上面的情形發生,在 C#2 引入了命名空間別名限定字符(::),使用 :: 代表前面接的一定是命名空間。
public static void Main()
{
    Console.WriteLine(typeof(WinForms::Button));
    Console.WriteLine(typeof(WebForms::Button));
}

3. 全局命名空間別名

  • C#2 引入的全局命名空間別名,可以指示全局命名空間中的類別,也可以用於類別完全限定名的一個「根」命名空間。
global using global::System.DateTime;

4. 外部別名

  • 假設有不同的程式提供了相同的命名空間,而命名空間又有相同的 class 名稱,則需要外部別名(extern)來處理。
extern alias JsonNet;
extern alias JsonNetAlternative;

using JsonNet::Newtonsoft.Json.Linq;
using AltJObject = JsonNetAlternative::Newtonsoft.Json.Linq.JObject;

JObject obj = new JObject();       
AltJObject alt = new AltJObject();