1. 程式人生 > WINDOWS開發 >《刻意練習之C#》-0014- namespace

《刻意練習之C#》-0014- namespace

namespace

namespace(名稱空間/名稱空間)提供了一種組織相關類和其他型別的方式。

和檔案或元件不同,namespace是一種邏輯組合,而不是物理組合。在C#檔案中定義類時,可以把它包含在namespace中,在其他地方訪問的時候便可通過namespace.yourClass訪問此namespace下的類。

using System;
namespace CustomerPhoneBookApp
{
	public struct Subscriber
	{
		// Code for struct here..
	}
}

namespace和程式集assembly無關;同一個assembly可以有不同的namespace,也可以在不同的assembly有相同的namespace。

using

在訪問類時,類的全名是namespace + class,名稱比較長;可以通過using關鍵字引入namspace,然後在正文中就可以直接使用class。

如果using語句引用的兩個namespace包含同名的型別,就必須使用完整的名稱。

假如我們有個類叫NamespaceExample,在名稱空間Wrox.ProCSharp.Basics和Wrox.ProCSharp.OOP下都有這個類,

在開頭對這兩個名稱空間的都有引用,此時需要使用全名來告訴編譯器我們究竟要用的是哪個名稱空間下的NamespaceExample類:

using Wrox.ProCSharp.OOP;
using Wrox.ProCSharp.Basics;
namespace Wrox.ProCSharp
{
	class Test
	{
		static void Main()
		{
			Basics.NamespaceExample nSEx = new Basics.NamespaceExample();
			// do something with the nSEx variable.
		}
	}
}

namespace的別名alias

using關鍵字的另外一個用法就是為類和名稱空間指定別名。如果namespace很長,有需要在程式碼中多次引用,可以為這個很長的namesapce指定一個短別名:

using alias = NamespaceName;

可以通過alias::className來進行定義和呼叫:

using System;
using Introduction = Wrox.ProCSharp.Basics;
class Program
{
	static void Main()
	{
		Introduction::NamespaceExample NSEx = new Introduction::NamespaceExample();
		Console.WriteLine(NSEx.GetNamespace());
	}
}

internal class Introduction
{
}

namespace Wrox.ProCSharp.Basics
{
	class NamespaceExample
	{
		public string GetNamespace()
		{
			return this.GetType().Namespace;
		}
	}
    
       internal class Introduction
	{
	}
}