1. 程式人生 > >名稱空間和using使用

名稱空間和using使用

什麼使用名稱空間(1)

    C#採用的是單一的全域性變數名稱空間,若有兩個變數或函式的名稱完全相同,就會出現衝突.

     如定義了一個使用者名稱變數userName,可能在呼叫某個庫檔案或別的程式程式碼中也定義了相同的變數名,此時便出現了衝突。

     名稱空間就是為解決C#中變數、函式的命名衝突而服務的。可以將同一名稱的變數定義在不同的名稱空間中。

    如:張家有電視機,李家也有電視機,王家也有電視機,但因為它們屬於不同的家庭,使用時只需將它們所屬的家庭作為字首名即可。

namespaceTcl

{

    class Monitor

    {

        public void ListModels()

        {

            Console.WriteLine("供應Tcl以下型號的顯示器:");

            Console.WriteLine("14\",15\" \n");

        }

    }

}

namespaceCH

{

    public class Monitor

    {

        public void ListModelStocks()

        {

            Console.WriteLine("以下是 長虹 顯示器的規格及其庫存量:");

            Console.WriteLine("14\"=1000,15\"=2000, 17\"=3000");

        }

        static void Main(string[] args)

        {

            Tcl.MonitorobjTcl =new Tcl.Monitor();

            MonitorobjCh= new Monitor();//不指定名稱空間,使用CH.Monitor類

            objTcl.ListModels();

            objCh.ListModelStocks();

        }

    }

}

為什麼使用using語句(2)

   建立了名稱空間後,如果名稱空間中巢狀比較深,在外部引用它們時是十分不方便的,書寫冗長.可以使用using語句來簡化對它們的訪問,

using語句的意思就好比是“我們需要對這個名稱空間中的變數,所以不要每次總是要求對它們分類”。

什麼情況下使用名稱空間的別名

       使用using語句可以簡化對名稱空間的引用,然而某些名稱空間中很可能包含相同名稱的類,在某些情況下卻恰恰需要用到這些同名的類。

例如在.NET Framework類庫中存在3個Timer類:System.Timer.Timer、System.Threading.TimerSystem.Windows.Forms.Timer,我們需要使

用System.Timer.Timer在後臺以固定的時間間隔檢查所有應用程式或系統的狀態,而使用System.Windows.Forms.Timer來在使用者介面中顯示一個

簡單的動畫,這時,開發人員就必須在類前面加上名稱空間。

別名 解決程式碼冗長問題

using Class1 = Namespace1.Test;  //別名到類

using Ns2=Namespace2.NameSpace3.NameSpace4;  //別名到名稱空間

UsingClass2=Namespace2.Namespace3.Namespce4.Test

namespaceNamespace1                                   

{

    class Test

    {

        public Test()

        {

            System.Console.WriteLine("Hello from Namespace1.Test");

        }

    }

}

classMainClass

{

    public static void Main()

  {

  Class1 obj1=new Class1();

  Ns2.Test obj2=new Ns2.Test();

  System.Console.Read();

  }

namespace Namespace2

{

   …

   namespace Namespace3

   {

  …

          namespace Namespace4

          {

  …

                class Test

                {

                       public Test()

                       {

System.Console.WriteLine

("Hello from Namespace2.Test");

                       }

               }

         }

   }

}

別名解決問題衝突

namespaceConsoleApplication10

{

    namespace CH

    {

        public class Monitor

        {

            public void ListModelStocks()

            {

                Console.WriteLine("以下是 長虹 顯示器的規格及其庫存量:");

                Console.WriteLine("14\"=1000,15\"=2000, 17\"=3000");

            }          

        }

    }

    namespace Tcl

    {

        class Monitor

        {

            public void ListModels()

            {

                Console.WriteLine("供應Tcl以下型號的顯示器:");

                Console.WriteLine("14\",15\" \n");

            }           

        }

    }

}

namespacetest

{

    using ConsoleApplication10;

    class Test

    {

        public void Func()

        {

             Monitor m = new Monitor();

       }

    }

}