1. 程式人生 > >C#每日一課(二十一)

C#每日一課(二十一)

C#名稱空間 名稱空間的目的是為了提供一種把一組名稱與其他名稱進行分隔的方式,保證在一個名稱空間中宣告的類的名稱與另一個名稱空間中宣告的相同的類的名稱不衝突。

  • 名稱空間定義 名稱空間的定義是以關鍵字namespace開始,後跟名稱空間的名稱
namespace namespace_name
{
	//程式碼
}

為了呼叫支援名稱空間的函式或變數,會把名稱空間的名稱置於前面

namespace_name.argument;

在Visual Studio當中新建C#控制檯應用程式chapter16_001 宣告類MyNamespace分別置於不同的名稱空間當中

namespace namespace_one
{
    class MyNamesapce
    {
        public void Todo()
        {
            Console.WriteLine("Todo in namespace_one!");
        }
    }
}

namespace namespace_two
{
    class MyNamespace
    {
        public void Todo()
        {
            Console.WriteLine("Todo in namespace_two");
        }
    }
}

在Main方法中測試呼叫時需要使用名稱空間進行區分:

namespace_one.MyNamesapce one = new namespace_one.MyNamesapce();
namespace_two.MyNamespace two = new namespace_two.MyNamespace();
one.Todo();
two.Todo();
Console.ReadKey();

編譯執行後結果如下: 編譯執行結果

  • using關鍵字 使用using關鍵這,表明程式使用的是給定名稱空間中的名稱。 比如我們在Main方法中對類Console的使用 Console.ReadKey(); 實際上它的完全限定名稱寫法如下: System.Console.ReadKey();

對於上面的例項,可以using其中一個名稱空間,比如: using namespace_one; 那行在Main方法中對於使用namespace_one名稱空間的可以省略名稱空間名稱 這個時候可以把 namespace_one.MyNamesapce one = new namespace_one.MyNamesapce();改為MyNamesapce one = new MyNamesapce(); 編譯執行後可以得到與上例中一樣的結果。

  • 巢狀名稱空間 名稱空間可以被巢狀定義,在一個名稱空間內部再定義另一個名稱空間
namespace namespace_outter
{
	//程式碼
	namespace namespace_inner
	{
		//程式碼
	}
}

當使用巢狀名稱空間的時候可以使用.運算子進行訪問 新增一個巢狀命名定間定義的類如下:

namespace namespace_outter
{
    class MyNamespace
    {
        public void Todo()
        {
            Console.WriteLine("namespace_outter!");
        }
    }
    namespace namespace_inner
    {
        class MyNamespace
        {
            public void Todo()
            {
                Console.WriteLine("namespace_inner!");
            }
        }
    }
}

使用using宣告名稱空間:using namespace_outter.namespace_inner; 在Main方法中加入如下程式碼進行測試:

namespace_outter.MyNamespace outter = new namespace_outter.MyNamespace();
namespace_outter.namespace_inner.MyNamespace inner = new namespace_outter.namespace_inner.MyNamespace();
MyNamespace inner2 = new MyNamespace();

outter.Todo();
inner.Todo();
inner2.Todo();

最終編譯執行的結果如下: 編譯執行結果