名稱空間和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.Timer和System.Windows.Forms.Timer,我們需要使
用System.Timer.Timer在後臺以固定的時間間隔檢查所有應用程式或系統的狀態,而使用System.Windows.Forms.Timer來在使用者介面中顯示一個
簡單的動畫,這時,開發人員就必須在類前面加上名稱空間。
別名 解決程式碼冗長問題using Class1 = Namespace1.Test; //別名到類
using Ns2=Namespace2.NameSpace3.NameSpace4; //別名到名稱空間
UsingClass2=Namespace2.Namespace3.Namespce4.TestnamespaceNamespace1
{
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();
}
}
}