第二十六式:C# 命名空间 (割据地盘)

绝世
秘籍
冲儿,江湖之大,同名同姓之人何其多?
如果华山派有个“令狐冲”,恒山派也有个“令狐冲”,叫一声名字,两个人都会答应,岂不乱套?
为了区分,我们必须加上前缀,比如“华山派的令狐冲”。这在 C# 中就叫命名空间 (Namespace)
原来如此!就是给代码划地盘,防止重名冲突?

1. 定义命名空间 - 划界

使用 namespace 关键字包裹你的代码。


namespace HuaShan
{
    class LinghuChong
    {
        public void Drink() { Console.WriteLine("华山令狐冲在喝酒"); }
    }
}

namespace HengShan
{
    class LinghuChong // 虽然类名一样,但在不同地盘,互不冲突
    {
        public void Pray() { Console.WriteLine("恒山令狐冲在念经"); }
    }
}
        

2. 使用命名空间 - 拜山

如果要用别的门派的类,有两种方法:


using HuaShan;

class Program
{
    static void Main()
    {
        LinghuChong lh = new LinghuChong(); // 默认是指 using 进来的那个
        lh.Drink();

        // 如果要用另一个,必须写全名
        HengShan.LinghuChong lh2 = new HengShan.LinghuChong();
        lh2.Pray();
    }
}
        
using 关键字还有另一个妙用!
对于实现了 IDisposable 接口的资源(比如文件流),用 using(...) { ... } 包裹起来,用完后会自动释放资源(自动打扫战场),防止资源泄露。
🗺️

动手时刻:双雄会

创建两个命名空间 GoodEvil

在两个空间里都定义一个 Boss 类。

在 Main 方法里分别实例化这两个 Boss,并让他们互相打个招呼。

查看参考答案

namespace Good { class Boss { public void Say() => Console.WriteLine("我是正派盟主"); } }
namespace Evil { class Boss { public void Say() => Console.WriteLine("我是魔教教主"); } }

// Main:
Good.Boss b1 = new Good.Boss();
Evil.Boss b2 = new Evil.Boss();
b1.Say();
b2.Say();
                    

成就解锁:【领主】 获得:江湖地图