首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 命名空間專題(二):巢狀命名空間、同名方法隔離、命名空間別名與全域限定符

     編輯:關於C語言

一、巢狀命名空間:層級化邏輯組織


namespace Csharp          // 最外層
{
    class Man { public string Name = "name in Man"; }
    
    namespace Counter     // 巢狀於 Csharp 內部
    {
        class Monkey { public string Name = "name in Monkey"; }
        
        namespace Nestedspace // 再巢狀
        {
            class Man { public string Name = "nested name"; }
        }
    }
}

二、同名類別在不同命名空間的隔離實例化


using System;

namespace Csharp
{
    class Program
    {
        static void Main()
        {
            // 1. Csharp.Man
            Csharp.Man mike = new Csharp.Man();
            
            // 2. Counter.Monkey (需全域限定符 :: 避免衝突)
            Counter.Monkey wukong = new global::Csharp.Counter.Monkey();
            
            // 3. Counter.Nestedspace.Man
            Counter.Nestedspace.Man jakson = new Counter.Nestedspace.Man();
            
            Console.WriteLine($"Csharp.Man: {mike.Name}");
            Console.WriteLine($"Counter.Monkey: {wukong.Name}");
            Console.WriteLine($"Counter.Nestedspace.Man: {jakson.Name}");
        }
    }
}

巢狀命名空間輸出

關鍵語法:global:: 全域限定符

  • 強制從根命名空間開始解析,避免區域命名空間遮蔽
  • 適用於產生代碼、巨集、複雜巢狀場景

三、同名方法在不同命名空間類別的獨立運作


// 兩個 Man 類別各自擁有 ChangeName 方法
public void ChangeName(string newName) { this.Name = newName; }

// 使用
mike.ChangeName("劉德華");
jakson.ChangeName("Mike Jachson");

Console.WriteLine(mike.Name);   // 劉德華
Console.WriteLine(jakson.Name); // Mike Jachson

同名方法獨立運作

四、命名空間別名:簡化長名稱與解決衝突


using NewName = Csharp.Csharp; // 別名 = 完整命名空間路徑

// 使用別名
NewName.Man newMan = new NewName.Man();
Console.WriteLine(newMan.Name); // name in Man
newMan.ChangeName("郭靖");
Console.WriteLine(newMan.Name); // 郭靖

命名空間別名結果

別名適用場景

  1. 極長命名空間路徑簡化
  2. 兩個引用命名空間包含同名類別時,為其中一個建立別名
  3. 版本適配:using V1 = Lib.V1; using V2 = Lib.V2;

五、extern 別名:組件層級隔離(進階)


// 編譯時:csc /r:V1=LibV1.dll /r:V2=LibV2.dll
extern alias V1;
extern alias V2;

V1::Namespace.Class c1 = new V1::Namespace.Class();
V2::Namespace.Class c2 = new V2::Namespace.Class();

解決同一專案引用同一組件不同版本的極端需求。

總結

巢狀命名空間提供層級化組織,global:: 確保根路徑解析,同名成員在不同命名空間完全隔離,using Alias = ... 別名簡化引用並解決衝突,extern alias 處理組件版本衝突。掌握這套機制,能從容應對百萬行級專案的命名空間管理挑戰。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved